Em princípio:
- Defina a variável de localidade
LC_CTYPE
para aquela que descreve seu conjunto de caracteres e codificação desejados, por exemplo,LC_CTYPE=fr_FR.UTF-8
. - Use
[:alpha:]
para representar todas as letras, pois os intervalos de caracteres não são bem definidos em locais que vão além do ASCII (eles dependem da implementação e do aplicativo) eA-Za-z
não enumera todas as letras mesmo em localidades onde os intervalos são baseados em números de pontos de código (falta as letras anteriores aA
ou depois deZ
, das quais o francês não possui, mas outras linguagens:Å
em sueco, Ž em tcheco,…) .
Assim,
tr -sc '[:alpha:]' '2'
No entanto, muitas implementações de tr
, incluindo a do GNU Coreutils, não suportam codificações multibyte. Por exemplo, o comando acima funciona em uma codificação Latin-1, mas não em UTF-8. Você pode usar sed em vez disso.
sed 's/[^[:alpha:]][^[:alpha:]]*/_/g'