原始测试文件:
[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