我有以下 XML 数据:
<info>
<data>
<name>my_image</name>
<value>site.com/image1.img</value>
</data>
<data>
<name>my_link</name>
<value>site.com/p_info</value>
</data>
</info>
Run Code Online (Sandbox Code Playgroud)
我想将每个 my_image 值的所有 site.com 替换为 siteimag.com (仅适用于 my_image 属性)。
所以结果将是:
<info>
<data>
<name>my_image</name>
<value>siteimag.com/image1.img</value>
</data>
<data>
<name>my_link</name>
<value>site.com/p_info</value>
</data>
</info>
Run Code Online (Sandbox Code Playgroud)
如何用 sed 命令完成呢?
谢谢。
sed '/my_image/{n;s/site.com/siteimag.com/}' file
Run Code Online (Sandbox Code Playgroud)
简要说明,
/my_image/:搜索包含“my_image”的行n。s/site.com/siteimag.com/: 进行替换正确的方法是使用 xml 解析器,例如xmlstarlet:
xmlstarlet ed -u "//data/name[text()='my_image']/following-sibling::value" \
-v "$(sed 's/site/&imag/' <(xmlstarlet sel -t -v "//data/name[text()='my_image']/following-sibling::value" file.xml))" file.xml
Run Code Online (Sandbox Code Playgroud)
输出:
<?xml version="1.0"?>
<info>
<data>
<name>my_image</name>
<value>siteimag.com/image1.img</value>
</data>
<data>
<name>my_link</name>
<value>site.com/p_info</value>
</data>
</info>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10750 次 |
| 最近记录: |