2016-09-18 108 views
0

我發的文件的文件名匹配的數組中匹配模式:搜索和刪除模式陣列的

lista=($(grep -El "<LastVisitedURL>.+</LastVisitedURL>.*<FavoriteTopic>0</FavoriteTopic>" *)) 

現在,我會刪除一個文件INDEX.XML所有標籤外殼包含在文件名陣列。

for e in ${lista[*]} 
do 
    sed '/\<TopicKey FileName=\"$e\"\>.*\<\/TopicKey\>/d' index.xml 
done 

完整的腳本是:

#! /bin/bash 

#search xml files watched and no favorites. 
lista=($(grep -El "<LastVisitedURL>.+</LastVisitedURL>.*<FavoriteTopic>0</FavoriteTopic>" *)) 
#declare -p lista 
for e in ${lista[*]} 
do 
    sed '/<TopicKey FileName=\"$e\">.*<\/TopicKey>/d' index.xml 
done 

即使正則表達式模式行不通,在sed在地方INDEX.XML編輯-i選項,重新加載索引文件多少次名怎麼有數組,這是不好的。

有什麼建議嗎?

+0

要編輯XML文件,使用'xmlstarlet' –

+0

xmlstarlet是有用的。感謝Quenot和所有人。 – chuy

回答

0

在這裏,在一個外殼使用一個例子:

% cat file.xml 
<?xml version="1.0"?>                          
<root> 
<foobar>aaa</foobar> 
<LastVisitedURL>http://foo.bar/?a=1</LastVisitedURL> 
<LastVisitedURL>http://foo.bar/?a=2</LastVisitedURL> 
<LastVisitedURL>http://foo.bar/?a=3</LastVisitedURL> 
</root> 

然後,命令行:

% xmlstarlet edit --delete '//LastVisitedURL' file.xml                
<?xml version="1.0"?> 
<root> 
    <foobar>aaa</foobar> 
</root>