Perl在单行中的单引号之间捕获

时间:2018-01-10 00:03:18

标签: perl

我正在尝试打印出单引号所包围的文字。

/bin/bash -lc '/home/CASPER_REPORTS/scripts/CASPER_gen_report.sh CASPER_1'
/bin/bash -lc '/home/CASPER_REPORTS/scripts/CASPER_gen_report.sh CASPER_1A'
/bin/bash -lc '/home/CASPER_REPORTS/scripts/CASPER_gen_report.sh CASPER_2'
/bin/bash -lc '/home/CASPER_REPORTS/scripts/CASPER_gen_report.sh CASPER_3'
/bin/bash -lc '/home/CASPER_REPORTS/scripts/CASPER_gen_report.sh CASPER_3A'

布尔值我猜这意味着perl会看到字符串。

$ cat /tmp/casper_reports | perl -nle 'print /'.*'/'
1
1
1
1
1

然而,当我尝试用括号捕获它时会抛出错误

$ cat /tmp/boobomb | perl -nle 'print /'(.*)'/'
-bash: syntax error near unexpected token `('

2 个答案:

答案 0 :(得分:5)

在Bash和Zsh shell中,您可以使用$''来允许转义单引号。

echo $'I wouldn\'t'

这也使$1不被bash解释,也可用于perl。

perl -nle $'print $1 if /\'(.*)\'/' < /tmp/boobomb

也看到了 https://unix.stackexchange.com/questions/30903/how-to-escape-quotes-in-shell

答案 1 :(得分:4)

通过hexadecimal escape对单引号(27)使用十六进制,因此\x27

perl -wnE'say $1 if /\x27(.*)\x27/' input.txt

根据您测试的样本数据,假设有一对单引号。