如果我想用另一个可以包含任何字符的字符串替换占位符{{VALUE}}
,那么最好的方法是什么?
sed s/{{VALUE}}/$(value)/g
如果$(value)
包含斜杠,使用可能会失败...
oldValue='{{VALUE}}'
newValue='new/value'
echo "${var//$oldValue/$newValue}"
但 oldValue 不是正则表达式,而是像 glob 模式一样工作,否则:
echo "$var" | sed 's/{{VALUE}}/'"${newValue//\//\/}"'/g'
问的问题基本上重复 了如何在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 解决方案提供足够的上下文。'''
"""
Sed 也可以像's|something|someotherthing|g'
(或与其他分隔符一起使用)一样工作,但如果您无法控制输入字符串,则必须使用一些函数将其转义,然后再将其传递给 sed..