9

^@ファイル内のレコードから印刷できない文字 (たとえば ) を削除しようとしています。レコードのボリュームが大きすぎるため、ループに時間がかかりすぎるため、cat を使用するファイルはオプションではありません。使ってみた

sed -i 's/[^@a-zA-Z 0-9`~!@#$%^&*()_+\[\]\\{}|;'\'':",.\/<>?]//g' FILENAME

それでも^@文字は削除されません。また、私は使用してみました

awk '{ sub("[^a-zA-Z0-9\"!@#$%^&*|_\[](){}", ""); print } FILENAME > NEW FILE 

しかし、それも役に立ちませんでした。

印刷できない文字を削除する別の方法を提案できる人はいますか?

使用tr -cdされていますが、アクセント付きの文字を削除しています。ただし、それらはファイルで必要です。

4

4 に答える 4

16

[:print:]おそらく、すべての印刷可能な文字を含むの補数を使用できます。

tr -cd '[:print:]' < file > newfile

のバージョンがtrマルチバイト文字をサポートしていない場合 (多くはサポートしていないようです)、これは GNU sed (UTF-8 ロケール設定) で機能します。

sed 's/[^[:print:]]//g' file
于 2015-12-22T09:48:15.413 に答える