GNU Sed では、
md5sum input.txt | sed 's/./x/5g'
これは、文字列の最初の 4 文字の置換を単純にスキップし、他のすべての文字の置換を実行します。
Awk を使用した POSIX の代替 (おそらくもっと単純なものがあるかもしれませんが)、
md5sum xad | awk '{
four=substr($0, 1, 4)
rest=substr($0, 5)
gsub(/./, "x", rest)
print four, rest
}' OFS=""
POSIXly (私が思うに)、sed ループを使用して、最初の非 x を繰り返し置き換えることができます 4 文字のプレフィックスに続く文字:
$ md5sum input.txt | sed '
:a
s/^\(....x*\)[^x]/\1x/
ta
'
[^x] を置き換えます [^x ] で 最初のフィールド (チェックサム) でのみ置換を行いたい場合。
perl で GNU sed の場合 利用できません:
md5sum input.txt | perl -pe 's/^.{4}(*SKIP)(*F)|./x/g'
^.{4}(*SKIP)(*F) 最初の 4 文字の置換を防ぎます
|. 置換する必要がある代替パターンを指定します
チェックサムのみを変更するには:
md5sum ip.txt | perl -pe 's/(^.{4}|\h.*$)(*SKIP)(*F)|./x/g'
md5sum の場合 出力は \ で始まります (例:ファイル名に改行文字がある場合)、 ^\\?.{4} を使用できます ^.{4} の代わりに 最初の 5 文字をマスクせずに残すことができます。