我的文件类似
<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 :(得分: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>
$
即可将输出保存到新文件中。