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

Replacing a string in a file that contains ${user.home} using sed in Linux

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

你不需要转义花括号{}

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

使用 xmlstarlet 查找和更新属性:

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

输出:

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