Regexp на выбор URL (Решено)
olegon 11 июня, 2012 - 23:03
Убился. Есть файл, куча текста. Задача казалось бы проста - выбрать URL
echo Вай-вай картинка {img}http://olegon.ru/empty.gif{/img} vs {img}http://olegon.ru/empty.gif{/img} the end| sed -e 's/^.*\{img\}\(.*\)\{\/img\}.*/\1/g'
и что-то я буксую :( суть проблемы в том, что в строке может быть несколько URL. По моему шаблону же выбирается только один...
P.S. там не {}, а квадратные скобки...
P.P.S. Решил так:
| tr "[]" "<>" | sed -e 's/<\/img>/<\/img>\n/gi' | sed -n -e 's/.*\(.*\)<\/img>.*/\1/pi'
»
- Для комментирования войдите или зарегистрируйтесь
Можно определить свой
Можно определить свой разделитель строк, вроде даже можно как "/img" задать
Может, тогда `grep -o`?
Может, тогда `grep -o`?
Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.
оно как-то странно работает,
оно как-то странно работает, если тегов несколько, то берет первый открывающий и последний закрывающий
http://olegon.ru
А нужны нежадные регвыры
А нужны нежадные регвыры (non-greedy regexp)
Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.
Я не великий знаток, но можно
Я не великий знаток, но можно попробовать:
'echo Вай-вай картинка [_img]http://olegon.ru/empty.gif[/img] vs [_img]http://olegon.ru/empty1.gif[/img] the end| sed 's/ /\n/g'|grep "[img]"|sed -e 's/^.*\[img\]\(.*\)\[\/img\].*/\1/g''
Правда если между тегами будут пробелы, случится нежданчик.
Если еще интересно,
Если еще интересно, доработал, чтоб пробелы не мешали:
echo Вай-вай картинка [_img]http://olegon.ru/empty.gif[/img]vs[_img]http://olegon.ru/empty1.gif[/img] the end| sed 's/\[img\]/\n\[img\]/g'|grep "[img]"|sed -e 's/^.*\[img\]\(.*\)\[\/img\].*/\1/g'