Con base GNU,
md5sum input.txt | sed 's/./x/5g'
Esto simplemente omite la sustitución de los 4 primeros caracteres de la cadena y realiza la sustitución de todos los demás caracteres.
Una alternativa POSIX con Awk (aunque probablemente haya algo más simple),
md5sum xad | awk '{
four=substr($0, 1, 4)
rest=substr($0, 5)
gsub(/./, "x", rest)
print four, rest
}' OFS=""
POSIXly (creo), podría usar un bucle sed para reemplazar repetidamente el primer no x
carácter que sigue al prefijo de 4 caracteres:
$ md5sum input.txt | sed '
:a
s/^\(....x*\)[^x]/\1x/
ta
'
Reemplazar [^x]
con [^x ]
si solo desea realizar la sustitución en el primer campo (la suma de comprobación).
Con perl
si GNU sed
no está disponible:
md5sum input.txt | perl -pe 's/^.{4}(*SKIP)(*F)|./x/g'
^.{4}(*SKIP)(*F)
evitará el reemplazo de los primeros cuatro caracteres
|.
especifica el patrón alternativo que debe ser reemplazado
Para cambiar solo la suma de comprobación:
md5sum ip.txt | perl -pe 's/(^.{4}|\h.*$)(*SKIP)(*F)|./x/g'
Si el md5sum
la salida comienza con un \
(por ejemplo:si el nombre del archivo tiene un carácter de nueva línea), puede usar ^\\?.{4}
en lugar de ^.{4}
para permitir que los primeros cinco caracteres queden sin máscara.