タイムスタンプを変更せずにファイルの最後のシングルバイトを反転してハッシュプログラムをテストしたいと思います。タイムスタンプを変更せずに維持するのは簡単ですが、UNIXユーティリティを使用してファイルの最後のバイトをどのように元に戻すことができますか?
例:最後のバイトを0xFFにXORします(これは簡単に元に戻すことができます)。
ベストアンサー1
sedではありませんが、Perlでは動作するようです。
perl -pe 's/.\z/ $& ^ "\xff" /es if eof' < in > out
1行ずつ読みますが8ビットなので問題になりません。eof
最後の行はtrueで、\z
文字列の最初の端で一致します(オプションの$
最終改行の前にも一致するため、厳密に最後のバイトではありません)。置換は単に一致する文字列を XOR します。