2009-10-21 8 views
13

¿Cómo puedo hacer una coincidencia de expresiones regulares como se muestra a continuación pero con comillas alrededor de ("^ This") como en el mundo real "Esto" será una cadena que puede tener espacios en ella.Regex hacer coincidir una cadena con espacios (¿usar comillas?) En una instrucción if

#!/bin/bash 

text="This is just a test string" 
if [[ "$text" =~ ^This ]]; then 
echo "matched" 

else 
echo "not matched" 
fi 

quiero hacer algo como

if [[ "$text" =~ "^This is" ]]; then 

pero esto no coincide.

Respuesta

20

Usted puede utilizar \ antes de espacios.

#!/bin/bash 

text="This is just a test string" 
if [[ "$text" =~ ^This\ is\ just ]]; then 
    echo "matched" 
else 
    echo "not matched" 
fi 
+0

+1 Esta es sin duda la manera de hacerlo. Las expresiones regulares Bash utilizadas con '= ~' deberían ser las más frecuentes (¿siempre?) Sin comillas. –

+0

Eso es bueno para escuchar. Nunca antes había usado expresiones regulares bash, solo experimenté y encontré que funcionó. * En S.O., ¡es correcto hasta que se demuestre lo contrario! * –

+0

FWIW, esto cambió entre Bash 3.1 y Bash 3.2. Bash 4.0 tiene un 'shopt -s/-u compat31' configurable para alternar entre los comportamientos. – ephemient

-2

Ha intentado:

^[\s]*This 
-1

¿Puede hacer que su descripción del problema sea más clara?

text="This is just a test string" 
case "$text" in 
    "This is"*) echo "match";; 
esac 

Lo anterior supone que desea hacer coincidir "Esto es" exactamente al comienzo de la línea.

0

No he conseguido a inline la expresión de esta manera:

if [[ "$text" =~ "^ *This " ]]; then 

pero si pones la expresión en una variable se puede utilizar la sintaxis de expresiones regulares normales como esto:

pat="^ *This " 
if [[ $text =~ $pat ]]; then 

Tenga en cuenta que la citando en $text y $pat es unesencial.

Editar: Un oneliner conveniente durante el desarrollo:

pat="^ *This is "; [[ " This is just a test string" =~ $pat ]]; echo $? 
+0

No hay espacios al comienzo de '$ text', por lo que' $ pat' debe ser '"^This "'. Además, citar las variables aquí no solo es innecesario, no funcionará. +1 para mostrar el formato variable. –

Cuestiones relacionadas