在其他问题中发现此错误,但我无法看到解决方案与此相关。
假设文件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)
(有和没有引号)。
答案 0 :(得分:2)
这是因为您为变量扩展结束了作为参数传递给Perl的字符串。这使得正则表达式成为两个参数。
相反,只需将整个正则表达式(包括变量)放在双引号中,shell应该正确扩展变量。
所以请改用"s/$2/$3/igm"
。