grep: regex apenas para corresponder qualquer coisa entre parênteses

21

Como faço para corresponder a palavra apenas entre parênteses

Entrada : this is (test.com)

Saída Desejada: test.com

Rahul Patil
fonte
1
Você está procurando um regex 'grep' para corresponder ou, por exemplo, um comando substituto 'sed' para gerar sua saída mostrada?
rickhg12hs

Respostas:

28

Aqui estão algumas opções, que imprimem a saída desejada:

  1. Usando grepcom o -osinalizador (apenas imprimir parte correspondente da linha) e expressões regulares compatíveis com Perl ( -P) que podem fazer uma busca :

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

    Esse regex pode precisar de algumas explicações:

    • (?<=\(): Este é um aspecto positivo , o formato geral é (?<=foo)bare corresponderá a todos os casos barencontrados logo após foo. Nesse caso, estamos procurando um parêntese de abertura, então usamos \(para escapar dele.

    • (?=\)): Esta é uma aparência positiva e simplesmente corresponde ao parêntese de fechamento.

  2. A -oopção para fazer grepcom que apenas imprima a parte correspondente de qualquer linha, procuramos o que estiver entre parênteses e os excluímos com sed:

    printf "this is (test.com)\n" | grep -o '(.*)' | sed 's/[()]//g'
    
  3. Analise a coisa toda com o Perl:

    printf "this is (test.com)\n" | perl -pe 's/.*\((.+?)\)/$1/'
    
  4. Analise a coisa toda com sed:

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