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
- sedコマンドの備忘録 - Qiita
- フィルタの利用法:ねこすけのシェルスクリプト
- sed usage - Shouheiのメモ
- sedコマンドによる最終行の削除について - UNIX・Linux 締切済 | 教えて!goo
デマの発生源?
SBクリエイティブ:【正誤情報】入門UNIXシェルプログラミング 改訂第2版
●第7章:p.175、下から3-1行目
<修正前> また、ファイルの最後の 4 行を消すには、 sed -e '$-3,$d' file と書きます。$-3 は最後から数えて 3 行目、つまり下から 4 行目のことです。
<修正後> ただし、次のように最終行の $ から何行目という指定はできません。 sed -e '$-3,$d' file sed では $-3 のような相対的な行の表現ができずにエラーになります。 最後の行から数行をまとめて消したい場合には、最後の行が何行目なのかを先に調べるか、最後の行だけを消す処理を何回か繰り返すことで対応します。