0

我有一个 XML 文件,我希望提取所有出现的某个标签 AB。该文件是一长行,包含约 500 000 个字符。

现在我确实知道正则表达式等,但是当我尝试使用它sed并尝试仅提取标签中的字符时,我对结果完全迷失了:)。

这是我的命令:

sed -r 's/(.*)<my_tag>([A-Z][A-Z])<\/my_tag>(.*)/hello\2/g' myfile.out

仅使用“helloAB”转换整个文件,例如,预期应至少包含 100 多个匹配项。

所以我正在考虑贪婪匹配等概念,但没有得到任何结果。也许awk是一个更好的主意?

4

2 回答 2

1

如果你有 python (2.6+),这应该是相当简单的:

import xml.dom.minidom as MD
tree = MD.parse("yourfile.xml")
for e in tree.getElementsByTagName("AB"):
   print e.toprettyxml()

一般来说,应该避免尝试手动解析 XML,因为有很多像这样的简单解决方案。更不用说,这些类型的库将使您无需进一步解析即可轻松访问属性和值。

于 2013-08-29T18:09:50.130 回答
0

谢谢你的回答。

我尝试了@MannyD 的建议,不幸的是 XML 格式似乎不正确,因此解析失败。因为我不能只预测格式良好的 XML,所以我制作了grep解决方案,它可以完成这项工作。

grep -o "<my_tag>[A-Z][A-Z]</my_tag>" myfile.out | sort -u

选项标志将-o在新行上打印每个匹配项,从那里我只需排序并打印文件中的唯一匹配项。

于 2013-08-30T06:51:02.250 回答