余白の書きなぐり

aueweのブログ

sedでファイルの最終4行を消す処理について

結論から言うと、sedを使ったスマートな方法は無いので、headコマンドを使いましょう。

$ head -n -4 file

# どうしてもsedを使いたければ
$ cat file |sed -e '$d' |sed -e '$d' |sed -e '$d' |sed -e '$d'

デマが蔓延している

以下のような$-3記法(そんなsedはない)をデッチ上げて紹介している記事が多い。

$ sed -e '$-3,$d' file

デマの発生源?

SBクリエイティブ:【正誤情報】入門UNIXシェルプログラミング 改訂第2版

●第7章:p.175、下から3-1行目

<修正前> また、ファイルの最後の 4 行を消すには、 sed -e '$-3,$d' file と書きます。$-3 は最後から数えて 3 行目、つまり下から 4 行目のことです。

<修正後> ただし、次のように最終行の $ から何行目という指定はできません。 sed -e '$-3,$d' file sed では $-3 のような相対的な行の表現ができずにエラーになります。 最後の行から数行をまとめて消したい場合には、最後の行が何行目なのかを先に調べるか、最後の行だけを消す処理を何回か繰り返すことで対応します。