¿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 grep
con la -o
bandera (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)bar
y coincidirá con todos los casos bar
encontrados 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 -o
opción grep
hace 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