grep
Идея персонажа зависит от локали . Если вы находитесь в локали, отличной от Unicode, и выполняете поиск в файле с символами Unicode, тогда количество символов не будет совпадать. Если вы, echo $LANG
то увидите локаль, в которой находитесь.
Если вы установите для переменных среды окружения LC_CTYPE
и / или LANG
значение, заканчивающееся на «.UTF-8», то вы получите правильное поведение:
$ 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 + КОМБИНИРУЮЩИЙ ХАРАКТЕР ОСТРОГО выше, чем ЛАТИНСКОЕ МАЛЕНЬКОЕ ПИСЬМО Е С ОСТРЫМ.
.
, что-то вродеwăsd's
будет соответствовать