grepまたはsedが一部のUTF-8文字を認識できない

grepまたはsedが一部のUTF-8文字を認識できない

ファイル内のすべての文字を識別してみてください。

ファイルには以下sampleが含まれます。

a eɪ
abandon əˈbændən
ability əˈbɪləti
able ˈeɪbəl
able ˈeɪbl
abortion əˈbɔrʃən
abortion əˈbɔrʃn
about əˈbaʊt
above əˈbʌv
abroad əˈbrɔd

ロケールが正しく設定されていることを確認してください。

$ echo $LANG

en_US.UTF-8

2番目のフィールドのコマンドを取得し、文字ごとに分割して数を数えます。

$ cat sample | awk '{print $2}' | grep -o . | sort | uniq -c | sort -n

  1 a
  1 æ
  1 i
  1 v
  2 d
  2 t
  3 e
  3 l
  3 ɔ
  3 r
  4 n
  9 b
 11 ə
 17 ɪ

ʃそしてどこˈ?結合文字や特別な内容はありません。他のUTF-8文字(たとえば、、ɔおよびə)も取得されます。ɪ

ちなみに、使用結果は「\n」行を追加する点を除けばsed 's/\(.\)/\1\n/g'ほぼ同じです。grep -o .

私が逃したものはありますか? grepには隠されたUTF-8オプションがありますか?

重要な場合Ubuntu 12.04.2 LTS

ベストアンサー1

問題は、ロケールの照合情報にsortあり、それを使用することです。uniq両方のコマンドに対してロケールをオフにすることは有効です。

cat sample | awk '{print $2}' | grep -o . | LC_ALL=C sort | LC_ALL=C uniq -c | sort -n
      1 ʊ
      1 ʌ
      1 a
      1 æ
      1 i
      1 v
      2 ʃ
      2 d
      2 t
      3 e
      3 l
      3 ɔ
      3 r
      4 ɪ
      4 n
      9 ˈ
      9 b
     11 ə

おすすめ記事