perl -lne 'print if s/^(.{188})[1-9]\d{7}(.{16})$/${1}20020101$2/' original.txt > new.txt #### while(<>) { next unless /^(.{188})(\d{8})(.{16})$/; print $1,"20020101$3\n" unless $2 eq '00000000'; }