【问题标题】:Multiple regexps on perl command-line doesn't work as expectedperl 命令行上的多个正则表达式无法按预期工作
【发布时间】:2016-03-21 07:44:12
【问题描述】:
我在 perl 命令行中使用了两个正则表达式,但它没有给出预期的结果:
$ 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。我做错了什么?
【问题讨论】:
标签:
regex
perl
command-line
multiline
【解决方案1】:
问题是您的输入文件一次被读取一行;代码对每一行输入执行一次。因为换行符在每一行的end,第二个正则表达式模式\\n#.*$永远无法匹配
解决方案是启用 slurp 模式,该模式在一次读取中获取整个文件。那么你的替换只会发生一次。 -0777 的开关值将为您执行此操作
$ perl -0777 -pe 's/\n/\\n/g; s/\\n#.*$/CHEESE/' test
输出
foo\nbarCHEESE
【讨论】:
-
-
@mkHun:您可以使用perldoc perlrun 或在线here 阅读Perl 附带的文档