Shell:从 HTML 中提取一些代码

发布于 2024-11-08 22:35:24 字数 1058 浏览 1 评论 0 原文

我有一个 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;"/>)'

似乎有些问题。

I have the following code snippet from a HTML file:

<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>

I want to extract the code

520z3AjKzHL
519z3AjKzHL
31F-sI61AyL
71k-DIrs-8L
61CCOS0NGyL

from the HTML.

Please note that: <img src="" style="display:none;"/> must be used because there are other similar urls in HTML file but I only what the ones between <img src="" style="display:none;"/>.

My Code is:

cat HTML | grep -Po '(?<img src="http://example.com/images/I/).*?(?=.jpg" style="display:none;"/>)'

Something seems to be wrong.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

小清晰的声音 2024-11-15 22:35:24

您可以通过使用 正向向前看/向后看:

cat HTML | grep -Po "(?<=<img src=\"http://example.com/images/I/).*?(?=\._.*.jpg\" style=\"display:none;\"/>)"

演示:


正则表达式细分:

  • .*? 勉强匹配所有字符
  • (?<= 前面是
  • (?=\._...ne;\ "/>) 后继 ._...ne;\"/>

You can solve it by using positive look ahead / look behind:

cat HTML | grep -Po "(?<=<img src=\"http://example.com/images/I/).*?(?=\._.*.jpg\" style=\"display:none;\"/>)"

Demonstration:


Regexp breakdown:

  • .*? match all characters reluctantly
  • (?<=<img src=...ges/I/) preceeded by <img .../I/
  • (?=\._...ne;\"/>) succeeded by ._...ne;\"/>
久隐师 2024-11-15 22:35:24

我假设您正在寻找向后查找来开始,这就是引发错误的原因。

(?<=foo) 不是 (?

这给出了您指定的结果情况,但我不知道您是否需要直到 JPG 为止:

cat HTML | grep -Po '(?<=img src="http://example.com/images/I/)[^.]*'

直到并排除 JPG 将是:

cat HTML | grep -Po '(?<=img src="http://example.com/images/I/).*(?=.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:

cat HTML | grep -Po '(?<=img src="http://example.com/images/I/)[^.]*'

Up until and excluding the JPG would be:

cat HTML | grep -Po '(?<=img src="http://example.com/images/I/).*(?=.jpg)'
隔纱相望 2024-11-15 22:35:24

如果您认为 gawk 是一个有效的 bash 解决方案:

awk -F'[/|\._]' -v img='/<img src="" style="display:none;"\/>/' '/img/{print $7}' file

And if you consider gawk as being a valid bash solution:

awk -F'[/|\._]' -v img='/<img src="" style="display:none;"\/>/' '/img/{print $7}' file
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文