由于文件有 CRLF 行结尾,我在 perl oneliner 失败时挠了挠头一小时。它在行尾有一个带有组匹配的正则表达式,并且 CR 包含在匹配中,使用反向引用进行替换会造成不好的东西。
我最终在正则表达式中手动指定了 CRLF,但是有没有办法让 perl 句柄自动换行呢?
原始命令是
perl -pe 's/foo bar(.*)$/foo $1 bar/g' file.txt
“正确”命令是
perl -pe 's/foo bar(.*)\r\n/foo $1 bar\r\n/g' file.txt
我知道我也可以在处理之前转换行尾,我对如何让 Perl 优雅地处理这种情况很感兴趣。
示例文件(以 CRLF 行结尾保存!)
[19:06:57.033] foo barmy
[19:06:57.033] foo baryour
预期产出
[19:06:57.033] foo my bar
[19:06:57.033] foo your bar
使用原始命令输出(bar 位于行首,因为它与回车符匹配):
bar:06:57.033] foo my
bar:06:57.033] foo your