正则表达式替换可能由空格分隔的两个连续字符串的实例

Bri*_*ick 4 perl

我想编写一个 perl one-liner 来替换两个特定的连续字符串的每个实例,这些字符串可能会或可能不会被空格分隔。

例如,假设我的两个字符串是john paul并且george我想用pete. 运行单线

$ cat ~/foo

john paulgeorge
john paul george
john paul

    george

george john paul
Run Code Online (Sandbox Code Playgroud)

应该导致

$ cat ~/foo

pete
pete
pete

george john paul
Run Code Online (Sandbox Code Playgroud)

我唯一想到的是

$ perl -p -i -e 's/john paul\s*george/pete/g' ~/foo
Run Code Online (Sandbox Code Playgroud)

但这导致

$ cat ~/foo

pete
pete
john paul

    george

george john paul
Run Code Online (Sandbox Code Playgroud)

有没有办法改变我的单线?

gle*_*man 5

您唯一需要添加到单行中的是将文件作为单个字符串的选项:

perl -0777 -p -i -e 's/john paul\s*george/pete/g' ~/foo
#    ^^^^^
Run Code Online (Sandbox Code Playgroud)

请参阅http://perldoc.perl.org/perlrun.html#Command-Switches