非常に大きな XML ファイルがいくつかあり、非 ASCII 文字を含む行を見つけようとしています。次のことを試しました。
grep -e "[\x{00FF}-\x{FFFF}]" file.xml
ただし、これは、指定された範囲内の文字が行に含まれているかどうかに関係なく、ファイル内のすべての行を返します。
構文が間違っているのでしょうか、それとも何か他の間違いをしているのでしょうか? 以下のことも試しました:
egrep "[\x{00FF}-\x{FFFF}]" file.xml
(パターンを一重引用符と二重引用符の両方で囲みます)。
ベストアンサー1
次のコマンドを使用できます:
grep --color='auto' -P -n "[\x80-\xFF]" file.xml
これにより行番号が表示され、非 ASCII 文字が赤で強調表示されます。
一部のシステムでは、設定によっては上記が機能しないので、逆のgrepを実行できます。
grep --color='auto' -P -n "[^\x00-\x7F]" file.xml
また、重要なのはフラグで、-P
これは : に等しい--perl-regexp
ため、パターンをPerlの正規表現として解釈します。また、次のようにも書かれています。
これは非常に実験的なものであり、grep -P は実装されていない機能について警告する可能性があります。