44
35

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

テキストの最後の行だけ消したい時、どうやればいい?

Last updated at Posted at 2014-02-02

いきなり問題

次のように最後に必ず、余計な一行がくっついてくるテキストファイル(question.txt)がありました。

question.txt:最後に余計な一行の付いたテキストファイル
こんにちは。
今日もいい天気ですね。
  :
 ♪なんだかんだ~
  :
  : (途中は何行あるかわかりません)
  :
 ♪どーしたこーした~
 ホゲーィ!
  :
さようなら。
.

この最後の一行だけを取り除いて出力したい時、どう書きますか?
(ヒント:このTipsのタグ)

Thinking time

 :
 :
 :
 :
 :
 :
 :
 :
 :
 :
 :
 :
 :
 :
 :
 :
 :
 :
 :
 :
 :
 :
 :
 :
 :
 :
 :
 :
 :
 :

こたえ

最もシンプルなこたえ
$ sed '$d' question.txt
別解
$ sed -n '$!p' question.txt

シェルスクリプトのwhile文、あるいはAWKコマンドなどで、「一行先読みして……。読み込みに成功したら先読みしていた行を出力して……」とかやらなくてもいいんですね。

sedのアドレス部に$を指定すると、最後の行を表すのでそれに対してd(削除)を実行してあげればいいというわけです。ちなみに$!と指定すると「最後の行以外」という意味になるので、そこをp(表示)するのでもイケます。(ただしこの場合は-nオプションが必要)

この$を応用すれば、最後の行だけいろいろと特別な加工をすることが簡単にできますね。先読みなんていう技を使わずに。

44
35
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
44
35

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?