grepを使用して、固定数の文字で文字列を照合します。

grepを使用して、固定数の文字で文字列を照合します。

6を使用して単語のすべての文字を検索しますgrep。私は現在これを持っています:

grep "^.\{6\}$" myfile.txt 

しかし、次のような結果も得られた。étuisétude

e私はこれが上記の引用の表記と関連していると思います。

これが起こらないようにするには、どのような措置を講じるべきですか?

ご協力ありがとうございます!

ベストアンサー1

grepキャラクターの考え地域によって異なります。 Unicodeではなくロケールにあり、Unicode文字を含むファイルからgrepする場合、文字数は一致しません。これにより、echo $LANG現在存在するロケールが表示されます。

LC_CTYPEおよび/または環境変数を「.UTF-8」で終わる値に設定すると、LANG正しい動作が得られます。

$ cat data
étuis
letter
éééééé
$ LANG=C grep -E '^.{6}$' data
étuis
letter
$ LANG=en_US.UTF_8 grep -E '^.{6}$' data
letter
éééééé
$

コマンドと同じ行に変数を割り当てることで、個々のコマンドのロケールを変更できます。

この構成では、マルチバイト文字は単一文字として扱われます。 ASCII以外の文字を完全に除外するには、他の答えのいくつかが解決策を提供することがあります。


次の条件が存在する場合、誤動作が発生する可能性があります。または、予想されるものとまったく同じではない可能性があります。文字の組み合わせgrepラテン語の小文字E + 急性文字を異なる方法で処理することができ、上記のラテン語の小文字のE + 急性文字を異なる方法で処理できます。

おすすめ記事