`grep`で16進コードを使って文字を指定するには?

`grep`で16進コードを使って文字を指定するには?

次のコマンドを使用して、16進コード0900(अではなく)から097F(вではなく)の文字セット範囲をgrepします。 अとvの代わりに16進コードを使用するには?

bzcat archive.bz2 | grep -v '<[अ-व]*\s' | tr '[:punct:][:blank:][:digit:]' '\n' | uniq | grep -o '^[अ-व]*$' | sort -f | uniq -c | sort -nr | head -50000 | awk '{print "<w f=\""$1"\">"$2"</w>"}' > hindi.xml

次の結果が表示されます。

    <w f="399651">और</w>
    <w f="264423">एक</w>
    <w f="213707">पर</w>
    <w f="74728">कर</w>
    <w f="44281">तक</w>
    <w f="35125">कई</w>
    <w f="26628">द</w>
    <w f="23981">इन</w>
    <w f="22861">जब</w> 
    ...

上記のコマンドでअとvの代わりに16進コードを使用したいと思います。

16進コードを使用できない場合は、文字セット('अ-v')に16進コードの代わりにUnicodeを使用できますか?

Ubuntu 10.04を使用しています

ベストアンサー1

見ているgrep: 日本語漢字を含むすべての行を検索

テキストは通常​​UTF-8でエンコードされるため、UTF-8エンコードに使用されるバイトの16進値を使用する必要があります。

grep "["$'\xe0\xa4\x85'"-"$'\xe0\xa4\xb5'"]"

そして

grep '[अ-व]'

同等で行います。文字クラス/括弧表現ロケールベースの一致(つまり、一致はサンスクリット語スクリプトの組み合わせによって異なります(つまり、一致は次のようになります)。いいえ「\u0905と\0935の間のすべての文字」、しかし「Devanagari AとDevanagari VAの間の順序」には違いがあるかもしれません。

$'...'はbash、ksh、およびzshのための「ANSI-Cエスケープ文字列」構文です。これは文字を入力するより簡単な方法です。\uXXXXエスケープ文字を使用して\UXXXXXXXXbashとzshのコードポイントを直接調べることもできます。)

一方、以下があります(-Pを参照)。

grep -P "\xe0\xa4[\x85-\xb5]"

これは次のことを行いますバイナリ彼と一致バイト値。

おすすめ記事