我有一个相当大的 XML 文件,我正尝试仅修改其中的某些行。我要修改的行将全部包含在其中。在这些行上,我只想包含 2 个字符串之间的文本(在本例中这些字符串是 / 和 )。因此,假设我在文本文件中有以下内容:
<title>xxxxxxxxx / xxx</title>
<sys>yyyyyyyyy</sys>
<name>test / extra text</name>
<date>zzzzzzzzz</date>
我想修改它以便得到以下内容:
<title>xxxxxxxxx / xxx</title>
<sys>yyyyyyyyy</sys>
<name>test</name>
<date>zzzzzzzzz</date>
这可以用 awk 或 sed 完成吗?
答案1
使用 XML 解析器解析 XML 数据。
# get the current value:
current=$(xmlstarlet sel --template --value-of "//name" file.xml)
# update the value
xmlstarlet ed --inplace --update "//name" --value "${current% /*}" file.xml
答案2
这应该有效:
sed 's:<name>test / extra text</name>:<name>test</name>:' file.xml
或者进行就地替换,添加-i
:
sed -i 's:<name>test / extra text</name>:<name>test</name>:' file.xml