Perl 用包含空格和双引号的字符串替换字符串
Perl to substitute string with a string containing spaces and double quotes
我的 bash 脚本构建了一个字符串变量 $arrayLMEs
,其中包含如下字符串:
var availableTags=[ "01 East Bering Sea", "02 Gulf of Alaska"];
我需要将此字符串放入 javascript 代码中,以替换占位符。
我想使用类似的东西:
perl -i -pe 's/PLACEHOLDER/'"${arrayLMEs}"'/' filename
但实际上该命令会报错,因为在字符串中发现了双引号,它们弄乱了 bash 命令并因此弄乱了 perl 命令。
如何修改命令以保留空格和双引号?
使用-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 的一个很好的副作用是替换是一个简单的字符串,因此不会解释原始字符串中的元字符。
郑重声明,我找到了一个解决方法(但不如 Tom Fenech 的解决方案好)。
将变量保存在文件中
echo $arrayLMEs > tmpfile
使用sed将文件内容粘贴到目标文件中
sed -i '/PLACEHOLDER/{
r tmpfile
d
}' filename
我想它是相当健壮的。缺点:强制即时创建另一个文件。
我的 bash 脚本构建了一个字符串变量 $arrayLMEs
,其中包含如下字符串:
var availableTags=[ "01 East Bering Sea", "02 Gulf of Alaska"];
我需要将此字符串放入 javascript 代码中,以替换占位符。 我想使用类似的东西:
perl -i -pe 's/PLACEHOLDER/'"${arrayLMEs}"'/' filename
但实际上该命令会报错,因为在字符串中发现了双引号,它们弄乱了 bash 命令并因此弄乱了 perl 命令。
如何修改命令以保留空格和双引号?
使用-s
开关将变量传递给perl:
perl -spe 's/PLACEHOLDER/$var/' -- -var="$arrayLMEs" filename
--
表示命令行参数结束。 -var="$arrayLMEs"
使用您的 shell 变量 $arrayLMEs
.
或者,您可以使用 awk:
awk -v var="$arrayLMEs" '{sub(/PLACEHOLDER/, var)}1' filename
使用 awk 的一个很好的副作用是替换是一个简单的字符串,因此不会解释原始字符串中的元字符。
郑重声明,我找到了一个解决方法(但不如 Tom Fenech 的解决方案好)。
将变量保存在文件中
echo $arrayLMEs > tmpfile
使用sed将文件内容粘贴到目标文件中
sed -i '/PLACEHOLDER/{ r tmpfile d }' filename
我想它是相当健壮的。缺点:强制即时创建另一个文件。