Shell

刪除多行模式

  • April 12, 2021

原始測試文件:

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

試圖刪除包含 pattern 的行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是行編輯器並且無法匹配多行模式?

您可以使用 in 中的保持緩衝區執行操作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

引用自:https://unix.stackexchange.com/questions/644783