perl 命令行上的多个正则表达式无法按预期工作
Multiple regexps on perl command-line doesn't work as expected
我在 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
。我做错了什么?
问题是您的输入文件一次读取一行;每行输入执行一次代码。因为换行符位于每行的 end 处,所以第二个正则表达式模式 \n#.*$
永远无法匹配
解决方案是启用 slurp 模式,在一次读取中获取整个文件。那么你的替换只会发生一次。 -0777
的开关值将为您执行此操作
$ perl -0777 -pe 's/\n/\n/g; s/\n#.*$/CHEESE/' test
输出
foo\nbarCHEESE
我在 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
。我做错了什么?
问题是您的输入文件一次读取一行;每行输入执行一次代码。因为换行符位于每行的 end 处,所以第二个正则表达式模式 \n#.*$
永远无法匹配
解决方案是启用 slurp 模式,在一次读取中获取整个文件。那么你的替换只会发生一次。 -0777
的开关值将为您执行此操作
$ perl -0777 -pe 's/\n/\n/g; s/\n#.*$/CHEESE/' test
输出
foo\nbarCHEESE