如果我想替换占位符{{VALUE}}
和另一个可以包含任何字符的字符串,那么最好的方法是什么?
如果sed s/{{VALUE}}/$(value)/g
包含斜杠,则使用$(value)
可能会失败...
答案 0 :(得分:3)
oldValue='{{VALUE}}'
newValue='new/value'
echo "${var//$oldValue/$newValue}"
但是oldValue不是正则表达式,而是像glob模式一样工作,否则:
echo "$var" | sed 's/{{VALUE}}/'"${newValue//\//\/}"'/g'
答案 1 :(得分:0)
Sed也可以像's|something|someotherthing|g'
一样工作(或者与其他分隔符一样),但是如果你无法控制输入字符串,你必须使用一些函数来转义它,然后再将它传递给sed。
答案 2 :(得分:0)
问题基本上与How can I escape forward slashes in a user input variable in bash?,Escape a string for sed search pattern,Using sed in a makefile; how to escape variables?,Use slashes in sed replace和many other问题重复。 “使用不同的分隔符”是通常的答案。 Pianosaurus的answer和Ben Blank的answer列出了需要在shell中转义的字符(反斜杠和&符号),除了用作备用分隔符的任何字符。但是,如果您的“包含任何字符的字符串”包含双引号,则它们不会解决引用引用问题。同样的问题可能会影响上一个答案中提到的${parameter/pattern/string}
shell变量扩展。
除了上面提到的几个问题之外的其他几个问题建议使用awk,这通常是一种比使用sed更容易复杂的更改方法。还要考虑perl和python。除了单引号和双引号字符串之外,python还有u'...'
unicode引用,r'...'
原始引用,ur'...'
引用以及使用'''
或"""
分隔符的三重引用。所陈述的问题没有为特定的awk / perl / python解决方案提供足够的上下文。