nawk ' { input=$0 while(match(input,"%[0-9a-zA-Z][0-9a-zA-Z]")) { str = substr(input,RSTART+1,RLENGTH-1) val = hex2char(str) sub("%[0-9a-zA-Z][0-9a-zA-Z]",val,input) } print input } function hex2char(s) { retval=0 for(i=1; i<=length(s); i++) { char=toupper(substr(s,i,1)) retval = 16*retval+match("0123456789ABCDEF",char)-1 } return sprintf("%c",retval) } '