仅当存在另一个字符串时才提取两个字符串之间的文本

仅当存在另一个字符串时才提取两个字符串之间的文本

我有一个相当大的 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

相关内容