Оболочка: извлечь код из HTML - PullRequest
1 голос
/ 21 мая 2011

У меня есть следующий фрагмент кода из файла 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.

Обратите внимание, что: <img src="" style="display:none;"/> необходимо использовать, потому что в HTML-файле есть другие похожие URL-адреса, но я могу указать только те, которые находятся между <img src="" style="display:none;"/>.

Мой код:

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

Кажется, что-то не так.

Ответы [ 3 ]

2 голосов
/ 21 мая 2011

Вы можете решить эту проблему, используя позитивный взгляд вперед / взгляд позади:

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

Демонстрация:


Распределение регулярных выражений:

  • .*? соответствует всем персонажам неохотно
  • (?<=<img src=...ges/I/) предшествует <img .../I/
  • (?=\._...ne;\"/>) сменяется ._...ne;\"/>
0 голосов
/ 21 мая 2011

И если вы считаете gawk допустимым решением bash:

awk -F'[/|\._]' -v img='/<img src="" style="display:none;"\/>/' '/img/{print $7}' file
0 голосов
/ 21 мая 2011

Я полагаю, вы искали средство для запуска, которое выдает ошибку.

(?<=foo) не (?<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)'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...