我有一个包含如下文本的文件
<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>
发布于 2016-03-08 17:00:43
您可以使用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
放在循环之后,即可将输出保存到新文件中。
https://stackoverflow.com/questions/35857735
复制相似问题