次のコマンドを使用して、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
テキストは通常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
エスケープ文字を使用して\UXXXXXXXX
bashとzshのコードポイントを直接調べることもできます。)
一方、以下があります(-Pを参照)。
grep -P "\xe0\xa4[\x85-\xb5]"
これは次のことを行いますバイナリ彼と一致バイト値。