bash --> perl 命令:只打印替换的文本

Mar*_*mbo 2 bash regex perl

我有包含以下内容的文件“test.txt”:

Val1 = '59'
Val2 = '76'
Val3 = '42'
Val4 = '53'
Run Code Online (Sandbox Code Playgroud)

我用这个命令:

perl -pe "s/^Val2 = '(.*)'/\1/" test.txt
Run Code Online (Sandbox Code Playgroud)

我想要:

76
Run Code Online (Sandbox Code Playgroud)

但我得到:

Val1 = '59'
76
Val3 = '42'
Val4 = '53'
Run Code Online (Sandbox Code Playgroud)

ste*_*ver 5

-p论点是,像sed的默认打印-也像sed,如果要抑制默认的打印,您可以使用-n来代替。

所以你可以这样做

perl -ne "print if s/^Val2 = '(.*)'/\1/" test.txt
Run Code Online (Sandbox Code Playgroud)

您还可以使用正则表达式匹配而不是正则表达式替代

perl -lne "print \$1 if /^Val2 = '(.*)'/" test.txt
Run Code Online (Sandbox Code Playgroud)

或者

perl -nE "say \$1 if /^Val2 = '(.*)'/" test.txt
Run Code Online (Sandbox Code Playgroud)

(反斜杠是为了防止$1被 shell 扩展,因为表达式在双引号中以允许在匹配中使用单引号)。