我需要使用系统命令(grep
),该命令具有与字符串串联的变量作为正则表达式来搜索文件。
是否可以在Perl中的变量和字符串之间连接grep
的正则表达式?
我尝试使用.
运算符,但不起作用。
if(`grep -e "$fubname._early_exit_indicator = 1" $golden_path/early_exit_information.tsv`){
print "-D- The golden data indicates early exit should occur\n";
$golden_early_exit_indicator=1;
}
预期与正则表达式"$fubname._early_exit_indicator = 1"
匹配,但与要求不匹配。
预期结果应为:
-D- The golden data indicates early exit should occur
但是在当前代码中,它不会打印出来。
输出链接:(https://drive.google.com/open?id=1N0SaZ-r3bYPlljKUgTOH5AbxCAaHw7zD)
答案 0 :(得分:1)
问题在于.
运算符未被识别为引号内的运算符。点运算符使用 字符串之间,而不是 inside 字符串。使用字符串中的点将其按字面意义插入。模式中的该文字点会导致代码中的grep
命令失败。
还要注意,在引号内,Perl尝试使用某些标识符解析规则对变量进行插值。
有关Perl中使用的不同类型的引用,请参见perldoc perlop
,有关标识符解析规则的信息请参见perldoc perldata
。
总而言之,为了在backticks参数中插值变量$fubname
,请使用
"${fubname}_early_exit_indicator = 1"
请注意,由于下面的下划线是有效的标识符字符,因此需要在标识符周围加上大括号。 (相反,文字点不是有效的标识符字符,因此,如果后面的字符是文字点,则不需要在标识符周围使用花括号。)
答案 1 :(得分:-1)
。运算符将无法在引号内工作。使用这样的东西-
if(`grep -e“ $ {fubname} _early_exit_indicator = 1” ...
我希望这行得通