$ perl --version
This is perl, v5.10.1 (*) built for x86_64-linux-gnu-thread-multi
$ echo -e "foo\nbar" > baz.txt
$ perl -p -e 's/foo\nbar/FOO\nBAR/m' baz.txt
foo
bar
我怎样才能让这个替代品工作呢?
发布于 2013-05-25 03:54:04
您可以使用-0
开关更改输入分隔符:
perl -0777pe 's/foo\nbar/FOO\nBAR/' baz.txt
-0777
将分隔符设置为undef
,-0
单独将其设置为\0
,这可能适用于不包含空字节的文本文件。
注意,/m
是不需要的,因为正则表达式既不包含^
也不包含$
。
发布于 2013-05-25 03:49:36
这与-p
开关有关。它一次读取一行输入。因此,您不能对两行之间的换行符运行regexp,因为它永远不会匹配。您可以做的一件事是读取修改变量$/
的所有输入,并对其应用正则表达式。一种方法:
perl -e 'undef $/; $s = <>; $s =~ s/foo\nbar/FOO\nBAR/; print $s' baz.txt
它产生了以下结果:
FOO
BAR
https://stackoverflow.com/questions/16742526
复制相似问题