非ASCII文字をすべてgrepするにはどうすればいいですか? 質問する

非ASCII文字をすべてgrepするにはどうすればいいですか? 質問する

非常に大きな 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 は実装されていない機能について警告する可能性があります。

おすすめ記事