Shell:从 HTML 中提取一些代码
我有一个 HTML 文件中的以下代码片段:
<div id="rwImages_hidden" style="display:none;">
<img src="http://example.com/images/I/520z3AjKzHL._SL500_AA300_.jpg" style="display:none;"/>
<img src="http://example.com/images/I/519z3AjKzHL._SL75_AA30_.jpg" style="display:none;"/>
<img src="http://example.com/images/I/31F-sI61AyL._SL75_AA30_.jpg" style="display:none;"/>
<img src="http://example.com/images/I/71k-DIrs-8L._AA30_.jpg" style="display:none;"/>
<img src="http://example.com/images/I/61CCOS0NGyL._AA30_.jpg" style="display:none;"/>
</div>
我想
520z3AjKzHL
519z3AjKzHL
31F-sI61AyL
71k-DIrs-8L
61CCOS0NGyL
从 HTML 中提取代码。
请注意:必须使用 因为 HTML 文件中还有其他类似的 url,但我只使用
。
我的代码是:
cat HTML | grep -Po '(?<img src="http://example.com/images/I/).*?(?=.jpg" style="display:none;"/>)'
似乎有些问题。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以通过使用 正向向前看/向后看:
演示:
正则表达式细分:
.*?
勉强匹配所有字符(?<= 前面是
(?=\._...ne;\ "/>)
后继._...ne;\"/>
You can solve it by using positive look ahead / look behind:
Demonstration:
Regexp breakdown:
.*?
match all characters reluctantly(?<=<img src=...ges/I/)
preceeded by<img .../I/
(?=\._...ne;\"/>)
succeeded by._...ne;\"/>
我假设您正在寻找向后查找来开始,这就是引发错误的原因。
(?<=foo)
不是(?。
这给出了您指定的结果情况,但我不知道您是否需要直到 JPG 为止:
直到并排除 JPG 将是:
I assume you were looking for a lookbehind to start, which is what was throwing the error.
(?<=foo)
not(?<foo)
.This gives the result case you specified, but I do not know if you need up until the JPG or not:
Up until and excluding the JPG would be:
如果您认为 gawk 是一个有效的 bash 解决方案:
And if you consider gawk as being a valid bash solution: