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

cap*_*ser 2 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'
Run Code Online (Sandbox Code Playgroud)

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

$ cat /tmp/casper_reports | perl -nle 'print /'.*'/'
1
1
1
1
1
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试用括号捕获它时,它会抛出一个错误

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

Wil*_*ill 5

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

echo $'I wouldn\'t'
Run Code Online (Sandbox Code Playgroud)

这也$1不会被bash解释,也可以用于perl.

perl -nle $'print $1 if /\'(.*)\'/' < /tmp/boobomb
Run Code Online (Sandbox Code Playgroud)

另见 https://unix.stackexchange.com/questions/30903/how-to-escape-quotes-in-shell


zdi*_*dim 5

通过十六进制转义将十六进制用于单引号(27),因此\x27

perl -wnE'say $1 if /\x27(.*)\x27/' input.txt
Run Code Online (Sandbox Code Playgroud)

假设每个单引号都是一对,每个单引号都是针对所显示的示例数据进行测试的。