S GNU Sed,
md5sum input.txt | sed 's/./x/5g'
Tím jednoduše přeskočíte nahrazení prvních 4 znaků řetězce a provedete nahrazení všech ostatních znaků.
Alternativa POSIX s Awk (i když pravděpodobně existuje něco jednoduššího),
md5sum xad | awk '{
four=substr($0, 1, 4)
rest=substr($0, 5)
gsub(/./, "x", rest)
print four, rest
}' OFS=""
POSIXly (myslím), že byste mohli použít sed loop k opakovanému nahrazení prvního non-x
znak následující za předponou o 4 znacích:
$ md5sum input.txt | sed '
:a
s/^\(....x*\)[^x]/\1x/
ta
'
Nahraďte [^x]
s [^x ]
pokud chcete provést substituci pouze v prvním poli (kontrolní součet).
S perl
pokud GNU sed
není k dispozici:
md5sum input.txt | perl -pe 's/^.{4}(*SKIP)(*F)|./x/g'
^.{4}(*SKIP)(*F)
zabrání nahrazení prvních čtyř znaků
|.
určuje alternativní vzor, který má být nahrazen
Chcete-li změnit pouze kontrolní součet:
md5sum ip.txt | perl -pe 's/(^.{4}|\h.*$)(*SKIP)(*F)|./x/g'
Pokud md5sum
výstup začíná \
(např. pokud název souboru obsahuje znak nového řádku), můžete použít ^\\?.{4}
místo ^.{4}
aby bylo prvních pět znaků ponecháno odmaskovaných.