【问题标题】:Sed replacement not working when using variables [duplicate]使用变量时 Sed 替换不起作用[重复]
【发布时间】:2011-07-06 14:11:42
【问题描述】:

尝试用 sed 替换字符串时发生了一些奇怪的事情。这有效:

find /home/loni/config -type f -exec sed -i 's/some_pattern/replacement/g' {} \;

所以当我手动输入字符串时它可以工作。但在以下情况下不会发生替换:

find /home/loni/config -type f -exec sed -i 's/${PATTERN}/${REPLACEMENT}/g' {} \;

当我回显这两个变量 PATTERN 和 REPLACEMENT 时,它们具有正确的值。

我正在尝试用我的配置目录中所有文件中的替换字符串替换所有出现的模式字符串。

【问题讨论】:

    标签: linux bash shell sed


    【解决方案1】:

    不确定我是否正确,但如果你想用 ${REPLACEMENT} 替换 ${PATTERN},你必须转义美元,也许还有大括号,这些是正则表达式中的保留字符:

    find /home/loni/config -type f -exec sed -i -e 's/\$\{PATTERN\}/\$\{REPLACEMENT\}/g' {} \;
    

    【讨论】:

    • 谢谢你上面的解决方案
    【解决方案2】:

    试试

    find /home/loni/config -type f -exec sed -i "s/${PATTERN}/${REPLACEMENT}/g" {} \;
    

    相反。 ' 引号不会扩展变量。

    【讨论】:

    • 那么在 bash 命令替换中呢? echo $(sed "s/local/$HOME/" /etc/hosts) 不起作用。
    • gman:那是因为$HOME通常包含斜杠,所以替换后,整个命令变成echo $(sed "s/local//home/erich/" /etc/hosts),这将无法按预期工作。
    • - 这对我有用。使用双引号(")而不是单引号(')。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-11
    • 2014-01-09
    • 2018-07-28
    • 2020-09-29
    • 2011-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多