元のテストファイル:
[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では保留バッファを使用してこれを実行できますが、sed
GNU sedを使用してこの問題を解決する方が簡単です。つまり、-z
改行文字の代わりにNULバイトを区切り文字として使用するように指示します。
$ sed -z 's/abc\ndef//' test.txt
hij
klmn
または、Perlに切り替えます(-0
NULを行区切り文字として使用して、-0777
一度にファイル全体を読み取るように指示します)。
$ perl -0777 -pe 's/abc\ndef//' test.txt
hij
klmn