我在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
。我做错了什么?
答案 0 :(得分:4)
问题是你的输入文件一次只读一行;代码对每行输入执行一次。由于换行符位于每行的 end ,因此第二个正则表达式模式\\n#.*$
永远不会匹配
解决方案是启用 slurp 模式,该模式在一次读取中获取整个文件。那么你的替换只会发生一次。切换值-0777
将为您执行此操作
$ perl -0777 -pe 's/\n/\\n/g; s/\\n#.*$/CHEESE/' test
foo\nbarCHEESE