grep: regex только для совпадения чего-либо между круглыми скобками


21

Как мне сопоставить слово только в скобках

Вход: this is (test.com)

Желание выхода: test.com


1
Вы ищете регулярное выражение grep для соответствия или, например, команду замены sed для генерации показанного результата?
rickhg12hs

Ответы:


28

Вот несколько вариантов, каждый из которых выводит желаемый результат:

  1. Использование grepс -oфлагом (только для печати совпадающей части строки) и Perl-совместимых регулярных выражений ( -P), которые могут сделать обходные пути :

    printf "this is (test.com)\n" | grep -Po '(?<=\().*(?=\))'
    

    Это регулярное выражение может нуждаться в пояснении:

    • (?<=\(): Это позитивный взгляд , общий формат (?<=foo)barи он будет соответствовать всем случаям, barнайденным сразу после foo. В этом случае мы ищем открывающую скобку, поэтому мы используем ее, \(чтобы избежать.

    • (?=\)): Это позитивный взгляд и просто соответствует закрывающей скобке.

  2. -oВариант grepпричин его печатать только совпадающую часть какой - либо линии, поэтому мы ищем то , что в скобках , а затем удалить их sed:

    printf "this is (test.com)\n" | grep -o '(.*)' | sed 's/[()]//g'
    
  3. Разобрать все это с помощью Perl:

    printf "this is (test.com)\n" | perl -pe 's/.*\((.+?)\)/$1/'
    
  4. Разобрать все это с помощью sed:

    printf "this is (test.com)\n" | sed 's/.*(\(.*\))/\1/'
    

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.