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 文字をマスクせずに残すことができます。