【问题标题】: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
    

    【讨论】:

    • 能分享一下perl中不同类型开关值的参考吗?
    • @mkHun:您可以使用perldoc perlrun 或在线here 阅读Perl 附带的文档
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-07
    • 1970-01-01
    • 2017-03-12
    • 1970-01-01
    相关资源
    最近更新 更多