複数行パターンの削除

複数行パターンの削除

元のテストファイル:

[root@scspr2056449018 ~]# cat test.txt
abc
def
hij
klmn

パターンを含む行を削除しようとしましたが、abc\ndef機能しません。

[root@scspr2056449018 ~]# sed -i 's/abc\ndef//' test.txt
[root@scspr2056449018 ~]# cat test.txt
abc
def
hij
klmn
[root@scspr2056449018 ~]# sed -i '/abc\ndef/d' test.txt
[root@scspr2056449018 ~]# cat test.txt
abc
def
hij
klmn

私の使い方に問題がありますかsed?それともsed行エディタであり、複数行パターンを一致させることができないため、間違ったコマンドを使用していますか?

答え1

sedでは保留バッファを使用してこれを実行できますが、sedGNU sedを使用してこの問題を解決する方が簡単です。つまり、-z改行文字の代わりにNULバイトを区切り文字として使用するように指示します。

$ sed -z 's/abc\ndef//' test.txt

hij
klmn

または、Perlに切り替えます(-0NULを行区切り文字として使用して、-0777一度にファイル全体を読み取るように指示します)。

$ perl -0777 -pe 's/abc\ndef//' test.txt

hij
klmn

関連情報