"替换替换未终止"变量

时间:2015-12-14 10:13:40

标签: linux bash perl

在其他问题中发现此错误,但我无法看到解决方案与此相关。

假设文件test包含:

one
twoX
three

我可以通过以下方式更正twoX

perl -0777 -i -pe 's/twoX/two/igm' test

我可以创建一个函数来执行此操作:

replace_str(){ perl -0777 -i -pe 's/'$2'/'$3'/igm' $1; }
replace_str test twoX two

但是当替换包含空格(可能是其他字符)时,这会失败:

replace_str test two 'two frogs'
Substitution replacement not terminated at -e line 1.

perl行与空间一起工作。为什么不在函数中调用?我尝试过其他报价,例如$(echo two frogs)(有和没有引号)。

1 个答案:

答案 0 :(得分:2)

这是因为您为变量扩展结束了作为参数传递给Perl的字符串。这使得正则表达式成为两个参数。

相反,只需将整个正则表达式(包括变量)放在双引号中,shell应该正确扩展变量。

所以请改用"s/$2/$3/igm"