【问题标题】:How to use a bash script variable with sed [duplicate]如何在 sed 中使用 bash 脚本变量 [重复]
【发布时间】:2011-03-13 08:52:28
【问题描述】:

我执行以下 bash 脚本:

#!/bin/bash
version=$1
echo $version
sed 's/\${version.number}/$version/' template.txt > readme.txt

我希望将 ${version.number} 的所有实例替换为变量“version”的内容。而是插入文字 $version。

我需要做什么才能让 sed 使用 $version 的当前值?

【问题讨论】:

    标签: bash scripting sed


    【解决方案1】:
    sed "s/\${version.number}/$version/" template.txt > readme.txt
    

    只有双引号可以替换美元符号。这也意味着单引号不需要转义美元符号。

    【讨论】:

    • 但是美元符号必须被转义,因为表达式被sed 视为正则表达式。所以我觉得应该是\\$
    • @Philipp,实际上 $ 符号仅在它是正则表达式(或可能的子表达式)的最后一个字符时才是一个锚。但我承认我很幸运。 ;) 您可以选择添加转义斜杠,但它是 \\\$
    • This 对我来说效果更好。
    【解决方案2】:

    你也可以简单地取消引用变量

    sed 's/'${version.number}'/'$version'/' template.txt > readme.txt
    

    【讨论】:

      【解决方案3】:

      它有点旧,但它可能仍然有用...... 对我来说,正如菲利普所说,它使用双重转义(如果你使用括号,则转义括号......):

      #!/bin/bash
      LIVE_DB_NAME='wordpress';
      STAGING='staging';
      sed -r "s/define\('DB_NAME', '[a-zA-Z0-9]+'\);/define('DB_NAME', '\\${LIVE_DB_NAME}');/" ${STAGING}/wp-config.php >tmp1;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-04-03
        • 2019-02-24
        • 2016-09-24
        • 1970-01-01
        • 2014-01-09
        • 2011-03-07
        • 1970-01-01
        相关资源
        最近更新 更多