grep или sed для слова, содержащего строку

#regex #sed #grep

#регулярное выражение #sed #grep

Вопрос:

пример файла:

 blahblah 123.a.site.com   some-junk
yoyoyoyo 456.a.site.com   more-junk
hihohiho 123.a.site.org   junk-in-the-trunk
lalalala 456.a.site.org   monkey-junk
  

Я хочу выделить все эти домены в середине каждой строки, у всех них есть общая часть a.site , для которой я могу использовать grep, но я не могу понять, как это сделать, не возвращая всю строку?

Возможно, sed или регулярное выражение здесь необходимы, поскольку простого grep недостаточно?

Ответ №1:

Вы можете сделать:

 grep -o '[^ ]*a.site[^ ]*' input
  

или

 awk '{print $2}' input
  

или

 sed -e 's/.*([^ ]*a.site[^ ]*).*/1/g' input
  

Комментарии:

1. Спасибо, верхний — это именно то, что мне было нужно. Это также дало мне некоторый материал для Google, так что двойное спасибо 🙂

Ответ №2:

Попробуйте это, чтобы найти что-нибудь в этой позиции

   $ sed -r "s/.* ([0-9]*).(.*).(.*)/2/g"

 [0-9]* - For match number zero or more time.
 .*     - Match anything zero or more time.
 .     - Match the exact dot.
 ()     - Which contain the value particular expression in parenthesis, it can be printed using 1,2..9. It contain only 1 to 9 buffer space.  means it contain all the expressed pattern in the expression.
  

Комментарии:

1. Было бы лучше, если бы вы немного объяснили свой ответ, это немного сложно для новичков в reg, таких как я 🙂