#bash #sed #grep
#bash #sed #grep
Вопрос:
У меня есть HTML-файл, из которого я хочу извлечь доменное имя.
www.this_i_dont_want.com
<div class="message"
garbage..
garbage...
www.hotmail.com
hotmail.com
hotmail.com/blah.php
http://www.hotmail.com/a.php?fdas
www. hotmail. com/a.php
hotmail . com
garbage....
</div>
Я хочу только «hotmail.com » извлечено из этого примера. Любая помощь приветствуется.
Комментарии:
1. что
hotmail.com
вы хотели извлечь?2. @AvinashRaj Вероятно, единственная строка
hotmail.com
из каждой строки.
Ответ №1:
Это будет соответствовать трем hotmail.com
строкам. Здесь используется Look behind,
grep -oP '(?<=www.)s?[^/]*' file
Пример:
$ grep -oP '(?<=www.)s?[^/]*' file
hotmail.com
hotmail.com
hotmail. com
или
Это соответствует любому символу до .com
нуля или более раз, пока на входе не появится буквенная точка,
$ grep -oP '[^.]*.com' file
hotmail.com
hotmail.com
hotmail.com
hotmail.com
Я думаю, что это та команда, которую вы ищете, потому что она соответствует только hotmail.com
. Никаких пробелов до или после строки hotmail.com
Комментарии:
1. спасибо, но в вашем примере не было «www. hotmail. com/a.php «. Также меня не интересует «www.this_i_dont_want.com » потому что это не внутри »
2. вы хотели извлечь
hotmail.com
из этой строкиhttp://www.hotmail.com/a.php?fdas
без использования какого-либоwww
или.com
?3. ДА. Но также примеры с пробелами. Я знаю, это звучит странно, но иногда бывают пробелы, где я собираю урожай.
4. Так что трудно сделать две вещи. Один был бы лучше.
5. sed — подходящий инструмент для этого. Ваша команда была бы
sed -nr 's/^.*www.s*([^.]*.)s*([^/]*).*/12/p' file
. Он извлекает hotmail.com отhttp://www.hotmail.com/a.php?fdas
, а также отwww. hotmail. com/a.php