删除多线图案

删除多线图案

原始测试文件:

[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是行编辑器并且无法匹配多行模式?

答案1

您可以使用 中的保持缓冲区执行操作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

相关内容