使用sed命令替换单个父标记下的xml的Child标记值

时间:2014-09-16 07:26:48

标签: xml unix sed

是否有任何简单的方法可以使用sed命令将父标记1下的{tag}的值从2替换为a
XML文件: -

<a><i>1</i><j>xyz</j></a>
<b><i>1</i><j>abc</j></b>

我执行了sed -i 's/<i>1<\/i>/<i>2<\/i>/g' filePath,这导致父标记12中的i标记值从a更改为b

3 个答案:

答案 0 :(得分:0)

使用awk

awk '/^<a>/ {sub("1","2")}1' file
<a><i>2</i><j>xyz</j></a>
<b><i>1</i><j>abc</j></b>

使用sed

sed '/^<a>/s/1/2/' file
<a><i>2</i><j>xyz</j></a>
<b><i>1</i><j>abc</j></b>

以下是通用awk/sed,可将任何数字更改为2

awk '/<a>/ {sub(/>[^<]+</,">2<")}1' file
<a><i>2</i><j>xyz</j></a>
<b><i>1</i><j>abc</j></b>

sed '/^<a>/s/>[^<][^<]*</>2</' file
<a><i>2</i><j>xyz</j></a>
<b><i>1</i><j>abc</j></b>

答案 1 :(得分:0)

通用方法:

sed -i 's/<a><i>[0-9]\+<\/i>/<a><i>2<\/i>/g' filePath

具体方法:

sed -i 's/<a><i>1<\/i>/<a><i>2<\/i>/g' filePath

答案 2 :(得分:0)

sed -i '/<a>/ s#<i>1<#<i>2<#' YourFile

假设:   - 和 1 在同一条线上   - 结构是相同的(空格char,没有子类或每个

的几个标签

这是一个非常具体的请求,可能需要更通用(比如任何数字内容被另一个替换,...​​...)

在此示例中

sed -i '/<a>/ s#1#2#' YourFile

就够了