如何将多行元素插入XML文件

时间:2016-03-08 02:18:49

标签: bash shell scripting

我的文件类似

<xml>
<plugins>
<plugin>
<x></x>
</plugin>
</plugins>

我想在其中添加一个新的<plugin>...</plugin>条目。 怎么做?

使用简单的字符串替换可能会有问题,因为要添加的条目类似于

 <cordova-plugin id="c6" pluginId="someid"
                      path="./somepath/">
         <platform id="p2" name="android" enabled="true"/>
         <platform id="p4" name="ios" enabled="true"/>
      </cordova-plugin>
   </cordova-plugins>

1 个答案:

答案 0 :(得分:0)

您可以使用i的{​​{1}}插入命令将其插入第一行。

sed

由于您需要为每个新行添加转义($ cat file <xml> <plugins> <plugin> <x></x> </plugin> </plugins> $ sed '/<\/plugins>/ i <cordova-plugin id="c6" pluginId="someid" path="./somepath/"> \ <platform id="p2" name="android" enabled="true"/> \ <platform id="p4" name="ios" enabled="true"/> \ </cordova-plugin> \ </cordova-plugins>' file <xml> <plugins> <plugin> <x></x> </plugin> <cordova-plugin id="c6" pluginId="someid" path="./somepath/"> <platform id="p2" name="android" enabled="true"/> <platform id="p4" name="ios" enabled="true"/> </cordova-plugin> </cordova-plugins> </plugins> $ ),而是可以使用普通\循环逐行读取并在遇到您的行时输出插入的内容:

bash

只需在循环后放置$ cat file <xml> <plugins> <plugin> <x></x> </plugin> </plugins> $ cat insert <cordova-plugin id="c6" pluginId="someid" path="./somepath/"> <platform id="p2" name="android" enabled="true"/> <platform id="p4" name="ios" enabled="true"/> </cordova-plugin> </cordova-plugins> $ while read -r line || [[ -n "$line" ]] > do > [[ "$line" =~ \</plugins\> ]] && cat insert > echo "$line" > done < "file" <xml> <plugins> <plugin> <x></x> </plugin> <cordova-plugin id="c6" pluginId="someid" path="./somepath/"> <platform id="p2" name="android" enabled="true"/> <platform id="p4" name="ios" enabled="true"/> </cordova-plugin> </cordova-plugins> </plugins> $ 即可将输出保存到新文件中。