Home > Net >  Bash regex not recognizing a single space " "
Bash regex not recognizing a single space " "

Time:06-07

I'm trying to solve a problem that appeared in my script which doesn't let me match the date time (YYYY-MM-DD HH:MM:SS) inside a for loop

list='"dt_txt":"2022-06-03 21:00:00"},'

regex_datehour='"dt_txt":"([0-9,-]*.[0-9,:]*)'




for i in $list; do
    [[ $i =~ $regex_datehour ]] && echo "${BASH_REMATCH[1]}"
done

It seems that the "." between the two pair of brackets it's not recognizing the space! that's because inside of the list, if I replace the empty space between the date and the time by a _, it works as intended! list='"dt_txt":"2022-06-03_21:00:00"},'

desired output:

2022-06-03 21:00:00

what I get:

2022-06-03

CodePudding user response:

The problem here is one that catches a lot of people, and that is whitespace breaking. In the for loop, your $list variable is not quoted, and it contains a space:

$ list='"dt_txt":"2022-06-03 21:00:00"},'
$ for i in $list ; do echo "i = $i" ; done ;
i = "dt_txt":"2022-06-03
i = 21:00:00"},

Make sure to put double-quotes around all strings that contain variables except regexes:

#!/usr/bin/env bash
# filename: re.sh

list='"dt_txt":"2022-06-03 21:00:00"},'

regex_datehour='"dt_txt":"([0-9,-]*.[0-9,:]*)'

for i in "$list" ; do
    [[ "$i" =~ $regex_datehour ]] && echo "${BASH_REMATCH[1]}"
done
$ ./re.sh
2022-06-03 21:00:00
  • Related