Linux Bash用未知文本替换占位符,其中包含任何字符



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

如果$(value)包含斜线...

,使用sed s/{{VALUE}}/$(value)/g可能会失败
oldValue='{{VALUE}}'
newValue='new/value'
echo "${var//$oldValue/$newValue}"

但OldValue不是REGEXP,而是Glod模式的工作,否则:

echo "$var" | sed 's/{{VALUE}}/'"${newValue/////}"'/g'

sed也可以像 's|something|someotherthing|g'(或与其他定界符有关)一样工作,但是如果您无法控制输入字符串,则必须使用一些功能在传递之前逃脱它它到sed ..

问的问题基本上是重复的,我如何在用户输入变量中逃脱bash中的向前斜线?如何逃避变量?,在替换中使用斜坡以及许多其他问题。通常的答案是"使用其他定界符"。钢琴龙的答案和Ben Blank的答案列表字符(Backslash和Ampersand)需要在外壳中逃脱,除了任何用作替代定界符的字符。但是,如果您的"可以包含任何字符的字符串"包含双引号,它们不会解决引用的引用问题。同样的问题可能会影响上一个答案中提到的${parameter/pattern/string} Shell变量扩展。

除了上面提到的几个问题外,还有其他一些问题建议使用AWK,这通常是一种很好的变化方法,比SED易于处理更复杂。还考虑Perl和Python。除了单引号和双引号的字符串外,Python还具有u'...' Unicode引用,r'...'原始引号,ur'...'引用和用'''"""定界器进行三重引用。所述的问题不能为特定的尴尬/perl/python解决方案提供足够的上下文。

最新更新