Avec GNU Sed,
md5sum input.txt | sed 's/./x/5g'
Cela saute simplement la substitution des 4 premiers caractères de la chaîne et effectue la substitution pour tous les autres caractères.
Une alternative POSIX avec Awk (bien qu'il y ait probablement quelque chose de plus simple),
md5sum xad | awk '{
four=substr($0, 1, 4)
rest=substr($0, 5)
gsub(/./, "x", rest)
print four, rest
}' OFS=""
POSIXly (je pense), vous pouvez utiliser une boucle sed pour remplacer à plusieurs reprises le premier non-x
caractère suivant le préfixe à 4 caractères :
$ md5sum input.txt | sed '
:a
s/^\(....x*\)[^x]/\1x/
ta
'
Remplacer [^x]
avec [^x ]
si vous souhaitez uniquement effectuer la substitution dans le premier champ (la somme de contrôle).
Avec perl
si GNU sed
n'est pas disponible :
md5sum input.txt | perl -pe 's/^.{4}(*SKIP)(*F)|./x/g'
^.{4}(*SKIP)(*F)
empêchera le remplacement des quatre premiers caractères
|.
spécifie le modèle alternatif qui doit être remplacé
Pour modifier uniquement la somme de contrôle :
md5sum ip.txt | perl -pe 's/(^.{4}|\h.*$)(*SKIP)(*F)|./x/g'
Si le md5sum
la sortie commence par un \
(par exemple :si le nom du fichier a un caractère de nouvelle ligne), vous pouvez utiliser ^\\?.{4}
au lieu de ^.{4}
pour permettre aux cinq premiers caractères de ne pas être masqués.