perl命令行上的多个regexp无法按预期工作

时间:2016-03-21 07:44:13

标签: regex perl command-line multiline

我在perl命令行中使用了两个regexp表达式,但它没有给出预期的结果:

$ cat test
foo
bar
#baz
#haz
naz
$ perl -pe 's/\n/\\n/g; s/\\n#.*$/CHEESE/' test
foo\nbar\n#baz\n#haz\nnaz\n\n

我希望结果为foo\nbarCHEESE。我做错了什么?

1 个答案:

答案 0 :(得分:4)

问题是你的输入文件一次只读一行;代码对每行输入执行一次。由于换行符位于每行的 end ,因此第二个正则表达式模式\\n#.*$永远不会匹配

解决方案是启用 slurp 模式,该模式在一次读取中获取整个文件。那么你的替换只会发生一次。切换值-0777将为您执行此操作

$ perl -0777 -pe 's/\n/\\n/g; s/\\n#.*$/CHEESE/' test

输出

foo\nbarCHEESE