我有一个XML文件,我希望提取所有出现的某些标签AB。该文件是一个长行,约500 000个字符。
现在我知道regexp等等,但是当我用sed
尝试并尝试仅提取标签中的字符时,我对结果完全丢失了:)。
这是我的命令:
sed -r 's/(.*)<my_tag>([A-Z][A-Z])<\/my_tag>(.*)/hello\2/g' myfile.out
仅使用“helloAB”转换整个文件,例如虽然预期至少应包含100多场比赛。
因此,我正在考虑贪婪匹配的概念,但这并不是随处可见。也许awk
是个更好的主意?
答案 0 :(得分: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,因为有更简单的解决方案。更不用说,这些类型的库可以让您轻松访问属性和值,而无需进一步解析。
答案 1 :(得分:0)
感谢您的回答。
我尝试了@MannyD的建议,遗憾的是XML似乎没有很好地形成,因此解析失败了。因为我无法预料到只有格式良好的XML,所以我提出了grep
解决方案,这就完成了工作。
grep -o "<my_tag>[A-Z][A-Z]</my_tag>" myfile.out | sort -u
-o
选项标记将在新行上打印每个匹配项,从那里我只是排序并打印文件中的唯一匹配项。