每次更换新行不按预期工作

use*_*107 0 regex perl

我正在尝试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)

代替?

Ale*_*eev 6

这里的问题是-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)