我有一个像
这样的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文件名。
答案 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文件,但是如果你只想附加到文件的末尾,那么使用echo
或cat
命令并将其输出发送到结尾。使用>>
运算符的文件。