【问题标题】:Replacing a string in a file that contains ${user.home} using sed in Linux在 Linux 中使用 sed 替换包含 ${user.home} 的文件中的字符串
【发布时间】:2018-08-27 14:11:15
【问题描述】:

我想在 Linux 中使用 sed 替换包含 ${user.home} 的文件中的字符串,但我无法做到。我使用 sed 尝试了以下选项,但失败了。

输入文件:

<property name="dev.home"  value="${user.home}"/>

尝试用代码替换${user.home}:

sed -i "s/$${user.home}/r_str/g" 1.xml
sed -i "s/${user.home}/r_str/g" 1.xml
sed -i "s/\$\{user\.home\}/r_str/g" 1.xml

实际:

<property name="dev.home"  value="${user.home}"/>

预期:

<property name="dev.home"  value="/dev"/>

【问题讨论】:

  • 试试你的最后一个选项,用单引号‘而不是双引号’
  • Bash 不允许将'.' 作为变量名的一部分。
  • 首先选择合适的工具。我建议使用 XML/HTML 解析器(xmlstarlet 或类似的东西)。
  • 他们在询问如何替换文件中的字符串;它与不使用 '.' 的 bash 无关。在变量名中。

标签: xml bash sed xmlstarlet


【解决方案1】:

你不需要转义花括号{}

echo '${user.home}' | sed "s/\${user.home}/lol$/"
lol$

【讨论】:

    【解决方案2】:

    使用 xmlstarlet 查找和更新属性:

    xmlstarlet edit --omit-decl --update 'property[@value="${user.home}"]/@value' --value '/dev' file
    

    输出:

    <property name="dev.home" value="/dev"/>
    

    【讨论】:

      猜你喜欢
      • 2016-05-01
      • 2012-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-07
      • 2014-03-30
      • 2018-01-29
      相关资源
      最近更新 更多