es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Encuentra si una cadena comienza con un patrón específico utilizando expresiones regulares (regex) en un script de bash.

Estoy intentando usar el regext para detectar si una cadena comienza con un patrón específico o no, pero no me funciona:

#!/bin/bash
line="{{ - hola querido - }}"
if [[ "${line}" =~ ^\{\{\s*-\s*hola\s*.*\}\} ]]; then
     echo "lo tengo"
fi

En este ejemplo, espero que la condición if detecte que la variable “line” tiene una cadena que comienza con “{{ – hola” y termina con “}}”
Sin embargo, no lo hace ya que el mensaje de echo no se imprime.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en regex y Bash, el problema con el fragmento de código proporcionado es que el patrón regex utilizado en la condición if es incorrecto para detectar si la cadena comienza con “{{ – hello”.

    El patrón ^{{\s-\shello\s.}} coincide con cualquier cadena que comienza con “{{ – hello” seguido de caracteres de espacio en blanco opcionales y cualquier caracter (representado por “.*”). Esto significa que el patrón coincidirá con la cadena proporcionada “{{ – hello dear – }}” y con cualquier otra cadena que contenga “{{ – hello”.

    Para corregir esto, el patrón regex debería indicar que la cadena debe comenzar con “{{ – hello”. Esto se puede lograr modificando el patrón a ^{{\s-\shello. Esto coincidirá con cualquier cadena que comience con “{{ – hello” seguido de caracteres de espacio en blanco opcionales.

    El código corregido se vería así:

    #!/bin/bash
    line="{{ - hello dear - }}"
    if [[ "$line" =~ ^\{\{\s*-\s*hello ]]; then
       echo "lo tengo"
    fi
    

    Esto detectará correctamente la cadena proporcionada “{{ – hello dear – }}” como una cadena que comienza con “{{ – hello”.

Comments are closed.