1. ホーム
  2. regex

[解決済み】ASCII以外の文字をすべてgrepする方法とは?

2022-04-17 23:07:49

質問

非常に大きなXMLファイルがいくつかあり、非ASCII文字を含む行を見つけようとしています。私は以下を試しました。

grep -e "[\x{00FF}-\x{FFFF}]" file.xml

しかし、これでは、指定された範囲の文字がその行に含まれているかどうかに関係なく、ファイル内のすべての行が返されます。

構文を間違えているのか、それとも他に何か間違ったことをしているのでしょうか? 私も試してみました。

egrep "[\x{00FF}-\x{FFFF}]" file.xml 

(シングルクォートとダブルクォートの両方でパターンを囲む)。

解決方法は?

コマンドを使用することができます。

grep --color='auto' -P -n "[\x80-\xFF]" file.xml

これは行番号を表示し、アスキーでない文字を赤くハイライトします。

システムによっては、設定により、上記が動作しない場合がありますので、その場合は、逆の方法でgrepします。

grep --color='auto' -P -n "[^\x00-\x7F]" file.xml

また、重要なのは -P フラグに相当します。 --perl-regexp というように、Perl の正規表現として解釈されます。また、次のように書かれています。

これは非常に実験的なものであり、grep -P は未実装の警告を発することがあります。 の機能です。