grep
A idéia de um personagem depende da localidade . Se você estiver em um código de idioma não Unicode e fizer a grep de um arquivo com caracteres Unicode, as contagens de caracteres não corresponderão. Se você echo $LANG
vir o local em que está.
Se você definir as variáveis de ambiente LC_CTYPE
e / ou LANG
como um valor que termina com ".UTF-8", obterá o comportamento correto:
$ cat data
étuis
letter
éééééé
$ LANG=C grep -E '^.{6}$' data
étuis
letter
$ LANG=en_US.UTF_8 grep -E '^.{6}$' data
letter
éééééé
$
Você pode alterar seu código de idioma para apenas um único comando, atribuindo a variável na mesma linha que o comando.
Com essa configuração, os caracteres de vários bytes são considerados caracteres únicos. Se você deseja excluir caracteres não-ASCII completamente, algumas das outras respostas têm soluções para você.
Observe que ainda é possível que as coisas quebrem, ou pelo menos não façam exatamente o que você espera, na presença de caracteres combinados . Você grep
pode tratar CARTA LATINA PEQUENA E + COMBINANDO CARACTERES ACIMA ACIMA de forma diferente da CARTA LATINA PEQUENA E COM AGUDA.
.
, algo comowăsd's
irá corresponder