我有svn日志XML文件,我想检索更改的文件。
<Paths>
可以包含一个或多个名为<Path>
的子元素。
在这种情况下,我想要检索/trunk/server/sub/sub1/scripts/fix/filename.sql
。
issues.xml(片段)的内容:
<paths>
<path
action="A"
prop-mods="false"
text-mods="true"
kind="file">/trunk/server/sub/sub1/scripts/fix/filename.sql</path>
</paths>
为此,我使用以下bash脚本:
#!bin/bash
filenames=($(grep -oP '<path[^>]*>(.+?)<\/path>' "issues.xml"))
echo $filenames
此脚本的输出为空。我不知道为什么。我试图在循环中输出所有数组元素,但这也不起作用。
有什么建议吗?
答案 0 :(得分:3)
使用标准文本处理器解析XML
通常是 NOT 。
建议使用正确的XML解析器,如xmllint
或xmlstarlet
处理您的文件,即使原始文件经过格式更改(例如添加新的空白区域),正则表达式用于提取需要经历变化。
将xmllint
与xpath
表达式一起使用实在太容易了。对于您的给定输入文件,只需执行,
xmllint --xpath 'string(//path)' file
/trunk/server/sub/sub1/scripts/fix/filename.sql
download and install xmllint
的步骤非常简单。
答案 1 :(得分:0)
可能你可以试试这个:
grep -oP '([^>]*)(?=</path>)' file