perl 命令行单行查找/替换,但*不*打印不匹配的行?

Ror*_*ory 2 regex perl command-line one-liner

我想用复杂的正则表达式在命令行上的文件上做一个正则表达式查找和替换,所以我需要 PCRE 和正在使用perl -pe "s/foo/bar"(而不是sed),它在应用后打印出所有行s///,但它也打印不比赛。

是否有一个perl命令行单行不会打印不匹配的行?我知道perl -pe s/foo/bar/ if /foo/,但后来我需要复制正则表达式。有没有可能不重复我自己?

Dad*_*ada 6

您可以使用-n标志(与 不同-p,它不会自动打印所有行)并仅打印与正则表达式匹配的行:

perl -ne 's/foo/bar/ && print'
Run Code Online (Sandbox Code Playgroud)

或者,等效地:

perl -ne 'print if s/foo/bar/'
Run Code Online (Sandbox Code Playgroud)