#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, таких как я 🙂