Использовать только имя домена Grep в HTML

#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