【问题标题】:Shell script to find the string and insert after 2 lines in xml用于查找字符串并在 xml 中的 2 行之后插入的 Shell 脚本
【发布时间】:2019-06-30 20:32:58
【问题描述】:

我无法获得 XML 的准确输出

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

这里需要找到&lt;String=12345&gt;,然后在&lt;Bin&gt;后面插入一行类似下面的东西

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

提前感谢您的帮助。

【问题讨论】:

    标签: xml sed


    【解决方案1】:

    虽然我不打算鼓励人们解析或编辑结构化数据 作为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>
    
    • 首先,它会在模式空间中消除所有行,以便与多行匹配。
    • 正则表达式&lt;String="12345"&gt;\n[^\n]*\n\ 与指定的匹配 行后跟任意行。
    • 然后s 命令插入字符串&lt;ValueXxxx /&gt; 和换行符 就在匹配的行之后。

    【讨论】:

    • 顺便说一句,你的 xml 文件是在 Windows 上生成的吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-28
    • 2019-11-23
    • 1970-01-01
    • 1970-01-01
    • 2013-03-18
    • 2012-11-02
    相关资源
    最近更新 更多