Bash Script Regular Expressions...How to find and replace all matches? Bash Script Regular Expressions...How to find and replace all matches? shell shell

Bash Script Regular Expressions...How to find and replace all matches?


Try this using sed:

line='Today is 10/12/2010 and yesterday was 9/11/2010'echo "$line" | sed -r 's#([0-9]{1,2})/([0-9]{1,2})/([0-9]{4})#\3-\2-\1#g'OUTPUT:Today is 2010-12-10 and yesterday was 2010-11-9

PS: On mac use sed -E instead of sed -r


Pure Bash.

infile='data.csv'while read line ; do  if [[ $line =~ ^(.*),([0-9]{1,2})/([0-9]{1,2})/([0-9]{4}),(.*)$ ]] ; then    echo "${BASH_REMATCH[1]},${BASH_REMATCH[4]}-${BASH_REMATCH[3]}-${BASH_REMATCH[2]},${BASH_REMATCH[5]}"  else    echo "$line"  fidone < "$infile"

The input file

xxxxxxxxx,11/03/2011,yyyyyyyyyyyyy          xxxxxxxxx,10/04/2011,yyyyyyyyyyyyy          xxxxxxxxx,10/05/2012,yyyyyyyyyyyyy          xxxxxxxxx,10/06/2011,yyyyyyyyyyyyy          

gives the following output:

xxxxxxxxx,2011-03-11,yyyyyyyyyyyyyxxxxxxxxx,2011-04-10,yyyyyyyyyyyyyxxxxxxxxx,2012-05-10,yyyyyyyyyyyyyxxxxxxxxx,2011-06-10,yyyyyyyyyyyyy


You can do it using sed

echo "11/12/2011" | sed -E 's/([0-9][0-9]?)\/([0-9][0-9]?)\/([0-9][0-9][0-9][0-9])/\3-\2-\1/'