Как мне сопоставить слово только в скобках
Вход:
this is (test.com)
Желание выхода:
test.com
Как мне сопоставить слово только в скобках
Вход:
this is (test.com)
Желание выхода:
test.com
Ответы:
Вот несколько вариантов, каждый из которых выводит желаемый результат:
Использование grep
с -o
флагом (только для печати совпадающей части строки) и Perl-совместимых регулярных выражений ( -P
), которые могут сделать обходные пути :
printf "this is (test.com)\n" | grep -Po '(?<=\().*(?=\))'
Это регулярное выражение может нуждаться в пояснении:
(?<=\()
: Это позитивный взгляд , общий формат (?<=foo)bar
и он будет соответствовать всем случаям, bar
найденным сразу после foo
. В этом случае мы ищем открывающую скобку, поэтому мы используем ее, \(
чтобы избежать.
(?=\))
: Это позитивный взгляд и просто соответствует закрывающей скобке.
-o
Вариант grep
причин его печатать только совпадающую часть какой - либо линии, поэтому мы ищем то , что в скобках , а затем удалить их sed
:
printf "this is (test.com)\n" | grep -o '(.*)' | sed 's/[()]//g'
Разобрать все это с помощью Perl:
printf "this is (test.com)\n" | perl -pe 's/.*\((.+?)\)/$1/'
Разобрать все это с помощью sed
:
printf "this is (test.com)\n" | sed 's/.*(\(.*\))/\1/'
Одним из подходов было бы использование регулярных выражений, совместимых с Perlgrep
:
$ echo "this is (test.com)" | grep -oP '(?<=\().*(?=\))'
test.com