用另一个字符串替换一个字符串(可能有任何奇怪的字符)

时间:2015-06-23 16:32:43

标签: regex bash perl

我有一个字符串,其中包含换行符和奇数字符,如引号,逗号,反斜杠等(它可能很长,因此转义字符并不简单)。

例如

STRING_FROM_BASH="blah2 => '/blah',"

perl -0777 -i.original -pe "s/###matchingchars/$STRING_FROM_BASH/igs" myfile

我收到错误

Having no space between pattern and following word is deprecated at -e line 1

我假设是因为它插入了bash字符串。

有没有办法让Perl不插入替换字符串?

2 个答案:

答案 0 :(得分:2)

请勿尝试从shell生成Perl代码。

您可以将其作为命令行参数传递:

perl -0777 -i.original -pe '$S //= pop; s/###matchingchars/$S/igs' myfile "$STRING_FROM_BASH"

您可以将其作为环境变量传递:

S="$STRING_FROM_BASH" perl -0777 -i.original -pe 's/###matchingchars/$ENV{S}/igs' myfile 

答案 1 :(得分:1)

感谢Etan,我找到了一个解决方法,我设置了变量,然后在Perl中使用它,如下所示...

replacement=STRING_FROM_BASH perl -0777 -i.original -pe 's/###matchingchars/$ENV{replacement}/igs' myfile