1

如果我想用另一个可以包含任何字符的字符串替换占位符{{VALUE}},那么最好的方法是什么?

sed s/{{VALUE}}/$(value)/g如果$(value)包含斜杠,使用可能会失败...

4

3 回答 3

3
oldValue='{{VALUE}}'
newValue='new/value'
echo "${var//$oldValue/$newValue}"

但 oldValue 不是正则表达式,而是像 glob 模式一样工作,否则:

echo "$var" | sed 's/{{VALUE}}/'"${newValue//\//\/}"'/g'
于 2012-10-30T20:15:36.210 回答
0

问的问题基本上重复 了如何在bash中的用户输入变量中转义正斜杠?, 为 sed 搜索模式转义字符串, 在 makefile 中使用 sed; 如何转义变量?, 在 sed replace许多其他问题中使用斜线。“使用不同的分隔符”是通常的答案。Pianosaurus 的回答和 Ben Blank 的回答列表字符(反斜杠和 & 符号)需要在 shell 中转义,除了用作备用分隔符的任何字符。但是,它们没有解决如果您的“可以包含任何字符的字符串”包含双引号时会出现的引用问题。同类型的问题会影响${parameter/pattern/string}上一个答案中提到的 shell 变量扩展。

除了上面提到的几个问题之外,还有一些其他问题建议使用 awk,这通常是处理比 sed 更复杂的更改的好方法。还要考虑 perl 和 python。除了单引号和双引号字符串外,python 还具有u'...'unicode 引号、r'...'原始引号、引号和带或分隔符的ur'...'三重引号。所述问题没有为特定的 awk/perl/python 解决方案提供足够的上下文。'''"""

于 2012-10-31T20:04:04.063 回答
0

Sed 也可以像's|something|someotherthing|g'(或与其他分隔符一起使用)一样工作,但如果您无法控制输入字符串,则必须使用一些函数将其转义,然后再将其传递给 sed..

于 2012-10-30T20:09:39.423 回答