【发布时间】:2017-03-05 03:16:31
【问题描述】:
> <img alt="Citizen Kane Poster" title="Citizen Kane Poster"
src="https://images-na.ssl-images-amazon.com/images/M/MV5BMTQ2Mjc1MDQwMl5BMl5BanBnXkFtZTcwNzUyOTUyMg@@._V1_UX182_CR0,0,182,268_AL_.jpg"
itemprop="image" />
我想从上面的文字中提取海报的网址。 这是我的 grep 语句:
count=$(grep -zPo '(?<=> <img alt=").*?src="\K.*?(?="itemprop="image")' ~/movie_local)
movie_local 是我保存网站页面源代码的地方。 我正在学习 grep 并且没有完整的命令,所以请对我温柔一点。你能帮帮我吗? :)
【问题讨论】:
-
首先,don't use regex to parse HTML。不过,您正在寻找的是 capturing group。
-
捕获组是一种提取部分匹配项的方法。我不熟悉如何在 grep 中使用它们,因为命令行有点奇怪。不过,第二个链接似乎很好地解释了它。
-
我建议使用 XML/HTML 解析器 (xmllint, xmlstarlet ...)。
-
@3ocene:
grep实现(至少我不知道)不支持捕获组:虽然您可以将(...)用于分组,但您赢了'无法访问那些组捕获的内容。但是,将-o选项(仅返回(整个)捕获的部分)与环视断言(需要 GNUgrep和-P)组合是真正捕获组支持的(有限)替代品。这正是这个问题的命令所尝试的,但失败了(出于不同的原因)。 -
其实我在测试后添加了
\s*“手动”。它不适用于 * 量词。无论如何,是的,这只是一个提示,而不是试图回答。