我有一个示例xml文件,如下所示
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<weekly-schedule>
<week>
<game date="2015-09-10 17:30 PDT" start="Friday">
<outcome outcome="pregame"/>
<id>SP003188020000</id>
</game>
<game date="2015-09-13 10:00 PDT" start="Sunday">
<outcome outcome="pregame"/>
<id>SP003188030000</id>
</game>
<game date="2015-09-13 10:00 PDT" start="Monday">
<outcome outcome="pregame"/>
<id>SP003188030000</id>
</game>
</week>
</weekly-schedule>
</root>
我想删除这个xml中的所有游戏节点,这些节点是start =&#34; Monday&#34;并开始=&#34;星期五&#34; 然后我想更新xml文件,而不是上面的游戏。我怎样才能做到这一点?
下面是我的脚本(可以是bash),我想在不使用xmlstarlet
的情况下执行此操作。
#!/bin/sh
DIR=/users/Desktop/data
FILE=games.xml
cd $DIR
# tried to use xmllint
DAY=$(echo "cat //root/weekly-schedule/week/game/@start" | xmllint --shell $FILE )
echo DAY
答案 0 :(得分:0)
你可以使用这个单行awk命令:
awk '/<game.*start="(Friday|Monday)">/{skip=1;} 1{if(!skip)print;} /<\/game>/{skip=0}' myfile.xml > newfile.xml && mv newfile.xml myfile.xml
它的工作方式如下:
skip
skip
skip
标志有条件地输出行,之后我们可能会重置skip