"á" 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'