不要なnull文字(ASCII NULなど\0
)を含むテキストファイルがあります。私はそれを表示しようとするとvi
、私が見る^@
通常のテキストでインタリーブシンボルを、。どうやって:
ファイルのどの行にnull文字が含まれているかを特定しますか?私はのためにgrepを試みている
\0
と\x0
、これは動作しませんでした。ヌル文字を削除しますか?
strings
ファイルで実行するとクリーンアップされますが、これが最善の方法かどうか疑問に思っていますか?
不要なnull文字(ASCII NULなど\0
)を含むテキストファイルがあります。私はそれを表示しようとするとvi
、私が見る^@
通常のテキストでインタリーブシンボルを、。どうやって:
ファイルのどの行にnull文字が含まれているかを特定しますか?私はのためにgrepを試みている\0
と\x0
、これは動作しませんでした。
ヌル文字を削除しますか?strings
ファイルで実行するとクリーンアップされますが、これが最善の方法かどうか疑問に思っていますか?
回答:
私は使用しますtr
:
tr < file-with-nulls -d '\000' > file-without-nulls
コマンド引数の途中の入力リダイレクトが機能するかどうか疑問に思っている場合は、機能します。ほとんどのシェルは認識してI / Oリダイレクション(との契約だろう<
、>
実際には、コマンドラインで、...)どこでも。
tr -d '\000' < file-with-nulls > file-without-nulls
、それは正しいはずです。<
tr
cat |
。細かい、きれいなソリューションとそれは私の問題を解決しました。
ファイル内のnull文字を削除するには、次のsedコマンドを使用します。
sed -i 's/\x0//g' null.txt
このソリューションは、ファイルを適切に編集します。ファイルがまだ使用されている場合は重要です。-i'ext 'を渡すと、「ext」サフィックスが追加された元のファイルのバックアップが作成されます。
sed -i
必要ですが、空の場合があります。これらのシステムでは''
、次のようにを追加しますsed -i '' 's/\x0//g "$FILE"
。
tr
私よりも桁違いに速い
$ sed --version
- > sed (GNU sed) 4.7
、私はと呼ばれるバックアップファイルを取得するには、以下の呼び出しを使用していたexample.csv.bak
:sed -i.bak 's/\x0//g' example.csv
多数の不要なNUL文字(1バイトおきなど)は、ファイルがUTF-16でエンコードされiconv
ており、UTF-8への変換に使用する必要があることを示しています。
iconv -f UTF-16 -t UTF-8 file
。
ex
(インプレース)を使用してNULL文字を削除する方法の例を次に示します。
ex -s +"%s/\%x00//g" -cwq nulls.txt
複数のファイルの場合:
ex -s +'bufdo!%s/\%x00//g' -cxa *.txt
再帰性については、グロビングオプションを 使用できます**/*.txt
(シェルでサポートされている場合)。
sed
とその-i
パラメーターは非標準のBSD拡張であるため、スクリプト作成に役立ちます。