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


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/'
    

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.