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

Perl to substitute string with a string containing spaces and double quotes

提问人:Bruno von Paris 提问时间:6/10/2015 更新时间:6/10/2015 访问量:622

问:

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

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

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

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

但实际上该命令抱怨,因为在字符串中发现了双引号,这弄乱了 bash 命令,从而弄乱了 perl 命令。

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

String Bash Perl 行情

评论

0赞 dolmen 6/10/2015
在 Linux 上的 bash 上运行时,我看不出任何问题:arrayLMEs='var availableTags=[ “01 东白令海”, “02 阿拉斯加湾”];';echo --占位符-- |perl -pe 's/PLACEHOLDER/'“${arrayLMEs}”'/' -
0赞 Bruno von Paris 6/11/2015
我必须说我的字符串是生成的。所以我猜引号在从一个命令传递到另一个命令时碰巧被剥离了。

答:

4赞 Tom Fenech 6/10/2015 #1

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

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

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

或者,您可以使用 awk:

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

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

评论

0赞 Bruno von Paris 6/10/2015
很棒的解释!谢谢
0赞 dolmen 6/10/2015
这是一个原始的解决方案。我从没想过要用单行字!-s
1赞 Bruno von Paris 6/10/2015 #2

作为记录,我找到了一种解决方法(但不如 Tom Fenech 的解决方案好)。

  1. 将变量保存在文件中

    echo $arrayLMEs > tmpfile

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

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

我想它非常强大。缺点:强制动态创建另一个文件。