Bash Script Regular Expressions...How to find and replace all matches?
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