2016-03-08 52 views
0

我有文件與文本一樣如何插入多線元素轉換成XML文件

<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> 
+0

所以你想在''之前加上你的新文字'.. right? – ritesht93

+0

是的你是對的 – Vik

+0

''是你檔案中的最後一行嗎? – SLePort

回答

0

您可以使用sed以下i插入命令行處將其插入`。

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

只需在循環後放置> newfile即可將輸出保存到新文件中。