use warnings; use strict; while () { chomp; s/ (logger\s+) ("[^"]*"|\w+)(,)([^,]+)(.*) /$1 . ("X" x length($2)) . $3 . ("X" x length($4) . $5)/ex; print "$_\n"; } __DATA__ logger abcdef123,"$£*&GHi^ logger "765)(?>jh",hhhhhh,joebloggs logger "7,)(?>jh",yyyyyyy,fredbloggs #### logger XXXXXXXXX,XXXXXXXXX logger XXXXXXXXXXX,XXXXXX,joebloggs logger XXXXXXXXXX,XXXXXXX,fredbloggs