回答:
を使用してこれを正確に達成する方法はわかりませんsed
が、これは以下で動作するソリューションですtr
:
tr < file-with-nulls -d '\000' > file-without-nulls
これはそのためのソリューションですsed
が、すべてではない場合もあります:
sed 's/\x0//g' file1 > file2
これは、すべての場合に機能する文字をスペースに置き換えることを含むソリューションです。
sed 's/\x0/ /g' file1 > file2
-i
、ファイルを所定の場所に変換するパラメーターも便利です。
tr
私のファイルの他のいくつかのバイトをつまずき、sed
何も置き換えませんでした。最終的にsed
はPython でそれをやった:
f = open('file-with-0bytes.dump')
for l in f.readlines():
print l.replace("\0", '')
ここだpipeableワンライナーは:
python -c 'import sys; sys.stdout.write(sys.stdin.read().replace("\0", ""))'
また、いくつかのコマンドは実際にヌルバイトをそこに残していますが、少なくともOSX端末では見えなくなりました。私はhexdump
これをデバッグしていました。
Perlを使用して正規表現を実行するのは非常に簡単です。に置き換えsed
てくださいperl -np -e
:
$ printf 'one\0two\0' | perl -np -e 's/\0/\n/g'
one
two
この-n
オプションを使用すると、sedと同様に、正規表現は1行ずつ実行されます。
レコードセパレータとしてゼロバイトを使用する場合は、Perlの-0
オプションを使用します。
$ printf 'one\0two\0' | perl -np0 -e 's/^/prefix /; s/\0/\n/g'
prefix one
prefix two
$ printf 'one\0two\0' | perl -np -e 's/^/prefix /; s/\0/\n/g'
prefix one
two
を実行すると、Perlのコマンドラインオプションを検索できますperldoc perlrun
。