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.
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í:
Esto detectará correctamente la cadena proporcionada “{{ – hello dear – }}” como una cadena que comienza con “{{ – hello”.