我有包含以下内容的文件“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)
该-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 扩展,因为表达式在双引号中以允许在匹配中使用单引号)。