Perl用包含空格和双引号的字符串替换字符串

时间:2015-06-10 12:51:17

标签: string bash perl quotes

我的bash脚本构建了一个字符串变量$arrayLMEs,其中包含一个字符串:

var availableTags=[ "01 East Bering Sea", "02 Gulf of Alaska"];

我需要将此字符串放在javascript代码中,以替换占位符。 我当时想要使用类似的东西:

perl -i -pe 's/PLACEHOLDER/'"${arrayLMEs}"'/' filename

但实际上命令抱怨,因为在字符串中找到双引号,这会搞乱bash命令,从而导致perl命令。

如何修复命令以保留空格和双引号?

2 个答案:

答案 0 :(得分:3)

使用-s开关将变量传递给perl:

perl -spe 's/PLACEHOLDER/$var/' -- -var="$arrayLMEs" filename

--表示命令行参数的结束。 -var="$arrayLMEs"使用shell变量$arrayLMEs的值设置perl变量。

或者,您可以使用awk:

awk -v var="$arrayLMEs" '{sub(/PLACEHOLDER/, var)}1' filename

使用awk的一个很好的副作用是替换是一个简单的字符串,因此原始字符串中的元字符不会被解释。

答案 1 :(得分:1)

为了记录,我发现了一种解决方法(但不如Tom Fenech的解决方案)。

  1. 将变量保存在文件

    echo $arrayLMEs > tmpfile

  2. 使用sed将文件内容粘贴到目标文件

    sed -i '/PLACEHOLDER/{ r tmpfile d }' filename

  3. 我认为它非常强大。下行:强制动态创建另一个文件。