kariaの日記 @ Alice::Diary

ノリツッコミの鳩子がはてなブログ書いちゃうよ

sedで「複数行でこのキーワードの並びがあったら削除する」を実現する

以下のような input.txt というテキストファイルがあったとして、「hogeを含む行」→「fugaを含む行」の2行 だけ を取り除きたい、みたいなケースをsedで対応する。

aaa
hoge: xxxx
fuga: xxxx
bbb
hoge: xxxx
ccc

以下の様な remover.sed を用意する

/hoge/ {
  N
  /fuga/ d
}

hogeを含む行の次の行にfugaが含まれていたら、dコマンドを使って2行とも削除する。該当しなかったら何もしない。

実行

$ sed -f remover.sed input.txt > output.txt

出力された output.txt を開くと、以下の様に「hogeを含む行」→「fugaを含む行」の連続が消えているはず。

aaa
bbb
hoge: xxxx
ccc

理論上は何行でもいけると思うしワンライナーにも出来ると思う(sedへの理解を深めるべく見やすさ重視でファイルにした)。PコマンドやDコマンドと組み合わせるとさらに使い道があるかもしれない。

参考

sed.open-code.club

www.slideshare.net