使用Linux中的sed替换包含$ {user.home}的文件中的字符串

时间:2018-03-19 04:29:28

标签: xml bash sed xmlstarlet

我想在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"/>

2 个答案:

答案 0 :(得分:2)

您无需转义花括号{}

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

答案 1 :(得分:2)

使用xmlstarlet查找和更新属性:

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

输出:

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