我希望这只会捕获和打印parens中定义的组,而是打印整行。如何仅捕获和打印括号中的组?
echo "abcdef" | perl -ne "print $1 if /(cd)/ "
我想要打印的内容:cd
它实际打印的内容:abcdef
怎么修?
在 perl 命令中,您必须使用单引号或保护变量:
echo "abcdef" | perl -ne "print \$1 if /(cd)/"
或者
echo "abcdef" | perl -ne 'print $1 if /(cd)/'
在双引号中,shell 扩展 $1。
即时解决您的问题是将双引号更改为单引号,如下所示:
$ echo abcdef | perl -ne 'print $1 if /(cd)/'
cd
使用双引号,shell 环境解释您未受保护的变量 $1,在您的环境中显然计算为一个空字符串。所以 perl 只接收命令,它是一个打印整行print if /(cd)/
的隐含命令。print $_ if /(cd)/
您还可以像这样使用受保护的变量:
$ echo abcdef | perl -ne "print \$1 if /(cd)/"
cd
请注意,使用不同分隔符(除 / 和 / 之外)的匹配项必须以m
关键字开头,而不是使用简写形式。但是在您的情况下,这并不重要,但是在使用匹配项时通常需要注意这一点,例如 m|/| /
将使用管道作为正则表达式的分隔符来匹配字符。