如何使用shell脚本在xml文件中添加新标记?

时间:2012-01-02 16:07:15

标签: xml shell

我有一个像

这样的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文件名。

2 个答案:

答案 0 :(得分:1)

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

cat test.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"

添加新的changeSet

[[ -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>

答案 1 :(得分:0)

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