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
відповідатиме