2012-11-28 14 views
19

私はLaTeXをクラッシュさせるいくつかのユニコード文字を含む大きなテキストファイルを持っています。 LinuxのbashでsedなどのファイルでASCII以外の文字を見つけるにはどうすればいいですか?bashツールで非ASCII文字を検索するには?

+4

UTF-8のファイルですか?文字はASCIIですが、いくつかは整形式のマルチバイトUTF-8であり、一部は(マルチバイトの)UTF-8で壊れていますか?整形式(マルチバイト)のUTF-8文字は多数ありますか?それとも他のエンコーディングですか? –

答えて

25

は試してみてください。のように使用することができる

nonascii() { LANG=C grep --color=always '[^ -~]\+'; } 

[]^

printf 'ŨTF8\n' | nonascii 

が "ない" を意味します。したがって、[^ -~]は、スペースと〜の間にない文字を意味します。したがって、制御文字を除いて、これは非ASCII文字と一致し、より移植性がありますが、以下の[^\x00-\x7f]というわずかに精度の低いバージョンです。 \+1 or moreを意味し、各バイトに散在するのではなく、完全な文字の周りに色が表示され、マルチバイトシーケンスが破損する可能性があります。

+0

うわー、これは素敵な赤色でも機能します。 –

+0

あなたは '[^ - 〜] \ +'の意味を教えていただけますか? ^はafaikの始まりです。 –

+0

非常に良い。しかし、制御文字(改行を除く)は見つかっていますが、実際はASCIIです。だから、タブ、キャリッジリターン(dosファイル)があるとき、それが見つけられる。非ASCII文字のみを出力する代替手段を提供できますか?他の答えの '[^ \ x00- \ x7f]アプローチは私にとってはうまくいきません。 – nealmcb

17

は、このコマンドを試してみてください。

grep -P '[^\x00-\x7f]' file 
+2

@JonasStein '-P'( - perl-regex)オプションを追加してください。 – kev

+6

注: '-P'オプションはBSD grepでは動作しません。これはOSXに付属のものです – nacho4d

+0

@ nacho4d代わりに何をすることができますか? –

関連する問題