grep: regex solo para unir cualquier cosa entre paréntesis

21

¿Cómo hago coincidir la palabra solo entre paréntesis

Entrada: this is (test.com)

Salida de deseo: test.com

Rahul Patil
fuente
1
¿Está buscando una expresión regular 'grep' para que coincida, o, por ejemplo, un comando sustituto 'sed' para generar el resultado que se muestra?
rickhg12hs

Respuestas:

28

Aquí hay algunas opciones, todas las cuales imprimen el resultado deseado:

  1. Utilizando grepcon la -obandera (solo imprime una parte coincidente de la línea) y expresiones regulares compatibles con Perl ( -P) que pueden hacer búsquedas :

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

    Esa expresión regular podría necesitar alguna explicación:

    • (?<=\(): Esta es una mirada positiva hacia atrás , el formato general es (?<=foo)bary coincidirá con todos los casos barencontrados inmediatamente después foo. En este caso, estamos buscando un paréntesis de apertura, por lo que usamos \(para escapar de él.

    • (?=\)): Esta es una anticipación positiva y simplemente coincide con el paréntesis de cierre.

  2. La -oopción grephace que solo imprima la parte coincidente de cualquier línea, por lo que buscamos lo que esté entre paréntesis y luego lo eliminamos con sed:

    printf "this is (test.com)\n" | grep -o '(.*)' | sed 's/[()]//g'
    
  3. Analiza todo con Perl:

    printf "this is (test.com)\n" | perl -pe 's/.*\((.+?)\)/$1/'
    
  4. Analiza todo con sed:

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