Con GNU Sed,
md5sum input.txt | sed 's/./x/5g'
Questo salta semplicemente la sostituzione dei primi 4 caratteri della stringa ed esegue la sostituzione per tutti gli altri caratteri.
Un'alternativa POSIX con Awk (anche se probabilmente c'è qualcosa di più semplice),
md5sum xad | awk '{
four=substr($0, 1, 4)
rest=substr($0, 5)
gsub(/./, "x", rest)
print four, rest
}' OFS=""
POSIXly (credo), potresti usare un ciclo sed per sostituire ripetutamente il primo non-x
carattere che segue il prefisso di 4 caratteri:
$ md5sum input.txt | sed '
:a
s/^\(....x*\)[^x]/\1x/
ta
'
Sostituisci [^x]
con [^x ]
se vuoi solo fare la sostituzione nel primo campo (il checksum).
Con perl
se GNU sed
non è disponibile:
md5sum input.txt | perl -pe 's/^.{4}(*SKIP)(*F)|./x/g'
^.{4}(*SKIP)(*F)
impedirà la sostituzione dei primi quattro caratteri
|.
specifica il modello alternativo che deve essere sostituito
Per modificare solo il checksum:
md5sum ip.txt | perl -pe 's/(^.{4}|\h.*$)(*SKIP)(*F)|./x/g'
Se md5sum
l'output inizia con un \
(ad esempio:se il nome del file ha un carattere di nuova riga), allora puoi usare ^\\?.{4}
invece di ^.{4}
per consentire di non mascherare i primi cinque caratteri.