ファイルからヌルバイトを削除するsed
の呪文は何ですか?試しています
s/\000//g
しかし、それはゼロの文字列を剥ぎ取っていることになります
s/\x00//g
は効果がないようです。私はsed
のスクリプトでやっているので、echo
のトリックが効くかどうかはわかりません
43 Chris Curvey 2011-05-24
具体的にどうやってsed
で実現できるのかはわかりませんが、tr
で実現できる解決策です
tr < file-with-nulls -d '\000' > file-without-nulls
これはsed
のための解決策であり、いくつかの場面では機能するが、すべてではない
sed 's/\x0//g' file1 > file2
これは、すべての場面で動作するはずのスペース文字に置き換えることを含む解決策です
sed 's/\x0/ /g' file1 > file2
48 Tamara Wijsman 2011-05-24
tr
ではファイル内の他のバイトに躓いてしまい、sed
では何も置き換えられませんでした。結局、sed
ではなく、Pythonでやってしまいました
f = open('file-with-0bytes.dump')
for l in f.readlines():
print l.replace("\0", '')
ここにパイプの効いたワンライナーがあります
python -c 'import sys; sys.stdout.write(sys.stdin.read().replace("\0", ""))'
また、いくつかのコマンドが実際にはヌルバイトを残したままにしていることに気がつきましたが、少なくともOSXのターミナルでは見えなくなっています。これをデバッグするために hexdump
を使ってみました
8 kqw 2012-10-25
Perlを使って正規表現を実行するのはとても簡単です。sed
をperl -np -e
に置き換えるだけです
$ printf 'one\0two\0' | perl -np -e 's/\0/\n/g'
one
two
-n
オプションを指定すると、 sed と同様に正規表現を一行ずつ実行します
レコードの区切り文字としてゼロバイトを使用したい場合は、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
を実行することで調べることができます
4 Flimm 2014-02-14
ヌルバイトをマッチさせるために、CygwinのSEDでこの正規表現を使用しています
[^\x01-\x7F]
1 Big Daddy 2014-01-16