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