【发布时间】:2015-08-14 00:21:47
【问题描述】:
我想使用 grep 提取这些 XML 标记中的文本(没有 XMLStarlet 或类似工具,尽管它们会更容易)。我以前用 grep 做过这个,但这个特殊情况有点复杂。标签包含带有连字符的唯一字母数字标识符(MusicBrainz ID):
<artist mbid="eaefd603-84c1-4db4-a72b-0cb718a0cc07">Chelsea Wolfe</artist>
我已经尝试过这个和许多变体:
grep -Po '(?<=<artist mbid=.*?>).*?(?=</artist>)'
在几乎所有情况下,我都会收到“grep:lookbehind assertion is not fixed length”。在 Perl 中,iirc,\K 是该错误的解决方案,但我不确定该放在哪里(我是一个正则表达式新手,以防你不知道)。我通过简单的反复试验没有成功。
我花了几个小时搜索 SO 和 Google,但找不到任何类似的东西可以提供帮助(可能我错过了一些东西)。所以,我的问题是:使用 grep,当这些标签包含唯一的字母数字标识符时,如何提取标签之间的文本?
【问题讨论】:
-
唯一的字母数字标识符是否总是相同的长度? (有时是)
-
是的,它们似乎总是 36 个字符(包括连字符)