首页 > 解决方案 > 用于查找字符串并在 xml 中的 2 行之后插入的 Shell 脚本

问题描述

我无法获得 XML 的准确输出

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

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

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

提前感谢您的帮助。

标签: xmlsed

解决方案


尽管我打算鼓励人们将结构化数据解析或编辑为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 />

推荐阅读