【问题标题】:how print all the attributes values of the title attributes in all my xml files如何在我的所有 xml 文件中打印标题属性的所有属性值
【发布时间】:2010-07-23 15:41:23
【问题描述】:

不知道有没有人知道 我可以使用什么命令或 bash-script-code 打印出我所有 xml 文件(在当前目录中)中的所有 title 属性值。

我正在使用 cygwin 并且文件名包含空格。

( 我一直在谷歌搜索,有很多关于下载其他实用程序的建议。如果我能避免这种情况,那对我有好处。例如我安装了 sgrep 然后得到这个错误: sh: m4: command not found system("m4 -s") 返回非零退出状态 (32512)。 预处理器返回空文件 )

如果有一个 Xpath 程序可以免费下载到 Windows 并像独立的搜索程序一样使用,那也很棒 =)

提前感谢您的帮助 /T

【问题讨论】:

  • 这可能取决于您的文档格式。你能举个例子吗?
  • w3.org/2001/XMLSchema-instance"><mybody><p Filter="true" class="- topic /p "/>

    这是一个教程 bla bla bla

    这是关于脚本的教程

    高级脚本
    mybody
  • 请不要介意无效性,这只是示例。

标签: xml bash scripting grep command


【解决方案1】:

如果标签和标题属性都在同一行,但标签的不同实例之间有换行符,则以下方法可能适合您。例如

<mytag someAttr="blah" Title="The Title goes here" ...

然后您可以执行以下操作以查找包含Title 属性的感兴趣标签:

grep -ro '<mytag[ \t].*Title="[^"]*"' /path/to/directory/to/search

或者,您应该能够使用findxargs

find /your/search/path -iname '*.xml' -print0 | \
    xargs -0 -r grep -ro '<mytag[ \t].*Title="[^"]*"'

既然你知道你有正确的标签和它对应的Title属性,你只需要Title属性,所以你可以使用grep-o选项只输出匹配正则表达式的数据,然后是cut提取 Title 的值:

grep -ro '<mytag[ \t].*Title="\([^"]*\)"' /path/to/directory/to/search | \
    grep -o 'Title="[^"]*"' | cut -f2 -d'"'

【讨论】:

  • 感谢您抽出宝贵的时间,但是在运行命令时,您建议我得到整本小说作为回报。所以不幸的是它不起作用。可能是因为我的文件中没有换行符吗?最好的问候/T
  • 如果mytags 之间没有换行符,那么这将不会按预期工作。 xmllint --format 可用于格式化文档,如果它不是空格关键。我已经更新了我的帖子,以澄清并更好地匹配您的问题。
  • 啊哈,只在我的一个浏览器中自动登录。卡莱布,非常感谢。你的 grep 命令帮助了我。实际上这部分已经足够我的需要了: grep -o 'Title="[^"]*"' *.xml | cut -f2 -d'"'
【解决方案2】:

您是否安装了 xml_grep?它是免费的,并且是我在此处安装 centOS 时的标准配置。它可以采用 xpath 表达式并打印结果。

【讨论】:

  • 感谢您的回答。那么 Cygwin 有 xml_grep 吗?我一直在谷歌搜索,但找不到它。 /T
【解决方案3】:

您需要在 cigwin 中安装预处理器“m4”,这将使您的 sgrep 工作

我在安装“m4”时遇到了同样的问题,解决了我在 cygwin 中的问题

【讨论】:

    猜你喜欢
    • 2015-11-17
    • 1970-01-01
    • 2011-03-03
    • 2012-12-02
    • 2018-12-28
    • 1970-01-01
    • 1970-01-01
    • 2018-08-04
    • 2017-08-25
    相关资源
    最近更新 更多