【问题标题】:Shell: Extract some code from HTMLShell:从 HTML 中提取一些代码
【发布时间】:2011-08-29 22:51:36
【问题描述】:

我有以下来自 HTML 文件的代码 sn-p:

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

请注意:必须使用&lt;img src="" style="display:none;"/&gt;,因为HTML文件中还有其他类似的url,但我只有&lt;img src="" style="display:none;"/&gt;之间的那些。

我的代码是:

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

好像出了点问题。

【问题讨论】:

    标签: bash shell command-line grep


    【解决方案1】:

    您可以使用positive look ahead / look behind:解决它

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

    演示:


    正则表达式分解:

    • .*? 勉强匹配所有字符
    • (?&lt;=&lt;img src=...ges/I/) 前面是&lt;img .../I/
    • (?=\._...ne;\"/&gt;)._...ne;\"/&gt; 成功

    【讨论】:

    • UUOC.. 哈哈哈有趣的页面。猫来自 OP
    【解决方案2】:

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

    (?&lt;=foo) 不是(?&lt;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)'
    

    【讨论】:

    • 您没有使用 OP 声明的 display:none 信息,这是必需的。完整的表达方式见我的回答。
    • 是的,我忘记了那部分。您的正则表达式更精确,在这种情况下是必要的。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-11
      • 2015-11-15
      • 1970-01-01
      • 1970-01-01
      • 2012-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多