【发布时间】: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