[英]How to insert multi-line element into XML file
我有像这样的文件
<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>
您可以使用以下sed
i
insert命令将其插入`行。
$ 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
,将输出保存到新文件即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.