我正在尝试tmp使用Perl 替换文件中的换行符,但会出现意外行为,如下所示.
user$ cat tmp
aa
bb
cc
user$ perl -p -e 's/\n/==/g' tmp
aa==bb==cc==
user$ perl -p -e 's/\nbb/==/g' tmp
aa
bb
cc
Run Code Online (Sandbox Code Playgroud)
为什么输出不是
aa==
cc
Run Code Online (Sandbox Code Playgroud)
代替?
这里的问题是-p标志循环你的代码,如:
LINE:
while (<>) {
... # your program goes here
} continue {
print or die "-p destination: $!\n";
}
Run Code Online (Sandbox Code Playgroud)
所以你的正则表达式为每一行运行.只需使用-0777选项将整个文件作为一行读取:
perl -p -0777 -e 's/\nbb/==/g' tmp
Run Code Online (Sandbox Code Playgroud)