【问题标题】:Search and delete matches of patterns array搜索和删除模式数组的匹配项
【发布时间】:2016-09-20 05:47:54
【问题描述】:

我创建了一个匹配模式的文件的文件名数组:

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 中的-i 选项用于在 index.xml 中进行编辑,多次重新加载索引文件,文件名如何具有数组,这很糟糕。

有什么建议吗?

【问题讨论】:

  • 要编辑 xml 文件,请使用 xmlstarlet
  • xmlstarlet 很有用。感谢 Qunot 和所有人。

标签: bash sed grep


【解决方案1】:

这是一个在 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>

【讨论】:

    猜你喜欢
    • 2021-11-16
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-06
    • 1970-01-01
    相关资源
    最近更新 更多