2012-01-02 186 views
0

我有这样如何使用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 id="4" author="naveen" dbms="oracle"> 
     <sqlFile path="/appl/Liquibase/sql/24_12_2011.sql" /> 
    </changeSet> 

有没有什么简单的办法在shell脚本执行此操作的xml文件?我还必须在标签中更改id和sql文件名称。

+2

'echo''>> file.xml'。它不会有效,但它是xml文件中的新标记... – 2012-01-02 16:12:52

回答

0

这不是一个真正的格式良好的XML文件,但如果你只是想附加到文件末尾,然后用echocat命令及其输出发送到文件的末尾用>>运营商。

+0

我不想在最后添加它。它不是完整的XML。这是我的完整XML文件的一部分。我想在使用shell脚本的xml文件之间的前一个标记之后添加此标记。任何帮助? – 2012-01-03 08:20:49

+0

你可以显示你的完整的XML结构?这将更容易帮助。 – 2012-01-03 08:42:43

1

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

猫的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> 

确定上次变更标签的行数

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 

猫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> 
相关问题