我有一个字符串,其中包含换行符和奇数字符,如引号,逗号,反斜杠等(它可能很长,因此转义字符并不简单)。
例如
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不插入替换字符串?
答案 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