【发布时间】:2013-05-24 23:33:39
【问题描述】:
如何仅提取匹配文本的子字符串。
我有一个包含多行的 XML 文件。然而,这是我所关心的。
<url>/localhost/index.html</url>
我试过了
cat file.txt | grep -o '<url>.*</url>'
它给了我整条线。我只想打印/localhost/index.html。有没有其他我可以使用的选项,就像我在 Python 中知道的那样,您可以将正则表达式分组到子组中,然后选择您要打印的那个。
【问题讨论】:
-
XML 文件 = XML 解析器
-
我不想使用解析器,我想要一个简单的命令行用法。当我想在命令行上执行此操作时,XML 解析器没有意义。 @ruakh
-
@squiguy 所说的话有很大的真实性。只要您的 XML 已格式化以便它们工作,您就可以摆脱正则表达式,但是如果您在一行上有多个
<url>...</url>条目,例如,答案中的所有贪婪的.*模式都会选择第一个<url>和最后一个</url>上线。如果<url>和</url>之间有换行符,则正则表达式将完全错过该条目。 XML 解析器可以避免所有这些问题。因此,请注意,正则表达式和 XML 或 HTML 通常不太适合。