"á" is 341
Não, não é. Seu conjunto de caracteres é UTF-8, no qual á é o caractere U + 00E1 que é codificado como a sequência de dois bytes \xc3\xa1
= 31
. Quando você escreve 1
no argumento para tr
, ele é interpretado como o byte 1
.
it doesn't knows the extended ASCII table chars
Sim, é verdade - exceto que não existem “caracteres de tabela ASCII estendidos”: ASCII é um conjunto de caracteres de 7 bits. Você quis dizer conjuntos de caracteres que estendem ASCII e tr
os suporta. tr
processa caracteres de acordo com a localidade atual ou bytes.
tr -cd '-6'
em ASCII significa manter caracteres imprimíveis e novas linhas. Em qualquer local, você pode dizer "caracteres imprimíveis" como [:print:]
. \n
é uma maneira mais clara de denotar novas linhas. Assim:
tr -cd '\n[:print:]'
Infelizmente, algumas implementações de tr
(incluindo a versão GNU) não podem lidar com conjuntos de caracteres em UTF-8. Você pode usar sed em vez disso.
sed 's/[^[:print:]]//g'