¿Cómo hago coincidir la palabra solo entre paréntesis
Entrada:
this is (test.com)
Salida de deseo:
test.com
¿Cómo hago coincidir la palabra solo entre paréntesis
Entrada:
this is (test.com)
Salida de deseo:
test.com
Respuestas:
Aquí hay algunas opciones, todas las cuales imprimen el resultado deseado:
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.
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'
Analiza todo con Perl:
printf "this is (test.com)\n" | perl -pe 's/.*\((.+?)\)/$1/'
Analiza todo con sed:
printf "this is (test.com)\n" | sed 's/.*(\(.*\))/\1/'
Un enfoque sería usar PCRE - Expresiones regulares compatibles con Perl con grep:
$ echo "this is (test.com)" | grep -oP '(?<=\().*(?=\))'
test.com