#!/bin/sh nawk 'BEGIN {FS=":"} { if( $0 ~ "^#" ) { print $0 } else if( (length($4) == 32) && (($4 ~ "^[0-9A-F]*$") || ($4 ~ "^[X]*$") || ( $4 ~ "^[*]*$"))) { print $0 } else { printf( "%s:%s:%s:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:", $1, $2, $3); for(i = 4; i <= NF; i++) printf("%s:", $i) printf("\n") } }'