ファイルからnullバイトを削除するsed
の呪文とは何ですか?私はしようとしています:
s/\000//g
しかし、それはゼロの文字列を取り除くことです。
s/\x00//g
効果がないようです。 sed
スクリプトでこれを実行しようとしているので、echo
トリックが機能するかどうかはわかりません。
sed
でこれを正確に実現する方法はわかりませんが、これはtr
で機能する解決策です。
tr < file-with-nulls -d '\000' > file-without-nulls
これはsed
の解決策であり、すべてではなく一部の状況で機能します。
sed 's/\x0//g' file1 > file2
これは、あらゆる状況で機能するはずのスペース文字への置換を含むソリューションです。
sed 's/\x0/ /g' file1 > file2
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", ""))'
また、一部のコマンドでは実際にnullバイトがそこに残されていますが、少なくとも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
perldoc perlrun
を実行すると、Perlのコマンドラインオプションを調べることができます。
Nullバイトを照合するために、私はこの正規表現をCygwinのSEDで使用します。
[^\x01-\x7F]