Shell脚本查找字符串并在xml中的2行之后插入

时间:2019-02-06 19:33:51

标签: xml sed

我无法获得XML的确切输出

<String="12345">
<Bin>
<Value1 />
<Value2 />
</Bin>
</String>

这里需要找到<String=12345>,然后在<Bin>之后插入一行类似于下面的内容

<String="12345">
 <Bin>
 <ValueXxxx />
 <Value1 />
 <Value2 />
 </Bin>
 </String>

预先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

尽管我打算鼓励人们解析或编辑结构化数据 与xml一样,以下方法适用于此特定情况:

nl=$'\n'
nl="\\$nl"

sed '
:l
N
$!b l
s#\(<String="12345">\n[^\n]*\n\)#\1<ValueXxxx />'"$nl"'#
' input.xml

产生:

<String="12345">
<Bin>
<ValueXxxx />
<Value1 />
<Value2 />
</Bin>
</String>
  • 首先,将所有行都包含在模式空间中,以允许与多行匹配。
  • 正则表达式<String="12345">\n[^\n]*\n\与指定的匹配 行后接任意行。
  • 然后s命令插入字符串<ValueXxxx />和换行符 在匹配的行之后。