LINUX.ORG.RU

sed,grep извлечь домены

 ,


0

2

Имеется N-ое колличество файлов HTML,каким образом можно извлечь все домены между <a href='http://my.site.com/random_domain.com'> и </a>

<a href='http://my.site.com/random_domain.com'>RANDOM_DOMAIN.COM</a>


Последнее исправление: iNdexoiD (всего исправлений: 1)

на коленке делал, без проверки

grep 'href=\'http://' * | sed s/'</a>'// | awk -F\> '{print $2}'


смысл:
грепаем нужные строки, седом удаляем закрывающий тег, авком разбиваем сткроку на поля (разделитель >) и выводим вторую часть

скорее всего напутал с ' и \

outsider ★★
()
Ответ на: комментарий от outsider

Может тогда вместо awk cut заюзать лучше?

s/'</a>'//

s#</a>##g

Вроде тогда ничего экранировать не надо.

Можно еще с pcregrep загнаться.

Radjah ★★★★★
()
Ответ на: комментарий от outsider

а вот про такое не знал

Можно использовать и другие символы, чтобы не экранировать регулярки. Читать так проще, дебажить тоже.

r3lgar ★★★★★
()
Ответ на: комментарий от iNdexoiD

Так и не должно. Экранировать кавычками нельзя, нужно экранировать только бэкслэшами.

r3lgar ★★★★★
()
Ответ на: комментарий от iNdexoiD

покажи выхлоп консоли вместе с тем что вводишь?

outsider ★★
()

HTML файлы мусор содержат?

Если нет, то должно хватить банального постпросмотра

echo '<a href='http://my.site.com/random_domain.com'>RANDOM_DOMAIN.COM</a>' | grep -oPe '[^><]*(?=</a>)'
Deleted
()
function myhrefs
{
   echo 'cat //a/@href' | xmllint --html --shell $1 2>/dev/null | grep -Po '\s*href\s*=\s*"\K.*(?=")'
}

export -f myhrefs

find . -name '*.html' | xargs bash -c 'myhrefs "$@"'
anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.