Shell
刪除多行模式
原始測試文件:
[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