【问题标题】:How to add a new tag in xml file using shell scripting?如何使用 shell 脚本在 xml 文件中添加新标签?
【发布时间】:2012-01-02 16:07:15
【问题描述】:

我有一个类似的 xml 文件

<changeSet id="1" author="naveen" dbms="oracle">
      <sqlFile path="/appl/Liquibase/sql/IntialVersion.sql" />
    </changeSet>
    <changeSet id="2" author="naveen"  dbms="oracle">
      <sqlFile path="/appl/Liquibase/sql/FirstRev.sql" />
    </changeSet>
    <changeSet id="3" author="naveen"  dbms="oracle">
      <sqlFile path="/appl/Liquibase/sql/23_12_2011.sql" />
    </changeSet>

我想使用 shell 脚本添加一个新的 changeSet 标签,如下所示

 <changeSet id="4" author="naveen"  dbms="oracle">
      <sqlFile path="/appl/Liquibase/sql/24_12_2011.sql" />
    </changeSet>

在 shell 脚本中有什么简单的方法可以做到这一点吗?我还必须在标签中更改 id 和 sql 文件名。

【问题讨论】:

  • echo '&lt;newtag /&gt;' &gt;&gt; file.xml。它不会是有效的,但它是 xml 文件中的一个新标签...

标签: xml shell


【解决方案1】:

快速、肮脏、不可靠。不解析 XML - 这只是假设您的输入文件将始终保留当前行格式。

猫测试.xml

<intro>
a\b&c;
d$e
</intro>
<changeSet id="1" author="naveen" dbms="oracle">
      <sqlFile path="/appl/Liquibase/sql/IntialVersion.sql" />
    </changeSet>
    <changeSet id="2" author="naveen"  dbms="oracle">
      <sqlFile path="/appl/Liquibase/sql/FirstRev.sql" />
    </changeSet>
    <changeSet id="3" author="naveen"  dbms="oracle">
      <sqlFile path="/appl/Liquibase/sql/23_12_2011.sql" />
    </changeSet>
<outro>
</outro>

确定最后一个changeSet标签​​的行号

line_no="`grep -n '</changeSet>$' test.xml | cut -f1 -d: | tail -n 1`" ; echo "$line_no"

添加新的变更集

[[ -n "$line_no" ]] && sed "$line_no"'s#$#\n<changeSet id="4" author="naveen"  dbms="oracle">\n  <sqlFile path="/appl/Liquibase/sql/24_12_2011.sql" />\n</changeSet>#' test.xml > test.xml.new

cat test.xml.new

<intro>
a\b&c;
d$e
</intro>
<changeSet id="1" author="naveen" dbms="oracle">
      <sqlFile path="/appl/Liquibase/sql/IntialVersion.sql" />
    </changeSet>
    <changeSet id="2" author="naveen"  dbms="oracle">
      <sqlFile path="/appl/Liquibase/sql/FirstRev.sql" />
    </changeSet>
    <changeSet id="3" author="naveen"  dbms="oracle">
      <sqlFile path="/appl/Liquibase/sql/23_12_2011.sql" />
    </changeSet>
<changeSet id="4" author="naveen"  dbms="oracle">
  <sqlFile path="/appl/Liquibase/sql/24_12_2011.sql" />
</changeSet>
<outro>
</outro>

【讨论】:

    【解决方案2】:

    它并不是一个格式正确的 XML 文件,但如果你只是想追加到文件末尾,那么使用 echocat 命令并将其输出发送到文件末尾 @987654323 @运算符。

    【讨论】:

    • 我不想在最后添加它。它不是完整的xml。它是我完整的 xml 文件的一部分。我想使用 shell 脚本在 xml 文件之间的前一个标签之后添加这个标签。有什么帮助吗??
    • 你能展示你完整的xml结构吗?提供帮助会更容易。
    猜你喜欢
    • 2016-10-08
    • 1970-01-01
    • 2017-10-22
    • 2016-10-14
    • 2014-06-07
    • 2020-07-23
    • 2018-01-25
    • 2012-12-08
    • 1970-01-01
    相关资源
    最近更新 更多