搜索和删除模式数组的匹配项

时间:2016-09-18 16:29:45

标签: bash sed grep

我制作了一个文件的文件名数组,其中包含一个模式:

bundle.js

现在我将在index.xml文件中删除所有包含数组中文件名的标签。

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

完整的脚本是:

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

即使正则表达式模式不起作用,在sed中使用#! /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 选项进行编辑就位index.xml,重新加载索引文件多次文件名如何包含数组,这很糟糕。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

这是在shell中使用的示例:

% 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>