我有一个PERL一个衬垫,我试图使用包含逗号分隔的电子邮件地址列表的配置文件.
perl -nle 'print for m/\* Members= (\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)*([,])*)*$/i)/g'
Run Code Online (Sandbox Code Playgroud)
返回bash:
syntax error near unexpected token `)'
Run Code Online (Sandbox Code Playgroud)
看起来正则表达式并不适合shell.我怀疑某些东西没有被正确转义,但由于错误的性质,正则表达式本身我不知道在哪里看.有任何想法吗?
那是因为你有一个你希望在你的正则表达式中的单引号,但shell不知道.这一次,您可以在Perl表达式周围使用双引号:
perl -nle "print for m/\* Members= (\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)*([,])*)*$/i)/g"
Run Code Online (Sandbox Code Playgroud)
更一般地说,你需要使用这个'\''技巧:
perl -nle 'print for m/\* Members= (\w+([-+.'\'']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)*([,])*)*$/i)/g'
Run Code Online (Sandbox Code Playgroud)
该'\''嵌入在壳单引号字符串单引号; 第一个引号关闭当前单引号字符串; 反斜杠引用嵌入单引号; 最后一个引号开始一个新的单引号字符串.