sed/awkで指定された範囲の行を削除(除外)して出力する

sedやawkで、指定された範囲の行を除外(というか、削除)したいということがあったので、その備忘。
以下のように記述して実行してやることで、対象となる範囲の行を除外して出力できる。

sed '/start/,/end/d' PATH
awk '/start/,/end/{next}{print}' PATH
Sponsored Links

[root@BS-PUB-CENT7-01 ~]# cat test.txt
111
222
333

444
start
eee

ddd
sss

end
555
666

777
888
999
[root@BS-PUB-CENT7-01 ~]# cat test.txt | sed '/start/,/end/d'
111
222
333

444
555
666

777
888
999
[root@BS-PUB-CENT7-01 ~]# cat test.txt | awk '/start/,/end/{next}{print}'
111
222
333

444
555
666

777
888
999

 

なお、開始と終了の語句が同じ場合、awkだと語句のある行のみが削除されてしまい、うまく範囲指定できないので注意。

 


Written by blacknon

インフラエンジニア(…のつもり)。 仕事で使うならクライアントはWindowsよりはUNIXの方が好き。 大体いつも眠い。

Leave a Comment

メールアドレスが公開されることはありません。

*