Comando tr – Substituir e excluir caracteres em arquivos no Linux
Comando tr – Substituir e excluir caracteres em arquivos no Linux
O comando tr é um comando básico no Linux/Unix, porém apesar disso não é muito conhecido ou utilizado com frequência.
Sua função principal é substituir (traduzir) o conteúdo de uma string (texto) recebido via entrada padrão (STDIN) de um formato para outro, ou ainda excluir caracteres.
O comando tr funciona usando dois conjuntos de conteúdo fornecidos pelo usuário. O primeiro conjunto pode ser considerado como o conjunto de caracteres original (atual) e o segundo contém os caracteres que irão ser usados na substituição/exclusão. Por exemplo, podemos trocar todas as ocorrências de um caracter em especial por outro usando o comando tr.
Sintaxe do comando
tr [opções] conjunto1 [conjunto2]
O comando receberá dados da entrada padrão, localizará os caracteres pertencentes ao conjunto1 e os substituirá pelos caracteres pertencentes ao conjunto2.
Onde os conjuntos são arquivos ou outras fontes de texto, que serão passadas como argumento ao comando tr via STDIN (entrada padrão).
Opções
-c, –complement
Usar o complemento do conjunto1 (conjunto inverso)
-d, –delete
Excluir caracteres do conjunto1, sem traduzi-los
-s, –squeeze-repeats
Substituir cada sequência de um caractere repetido listado no conjunto1 com uma única ocorrência do caractere
-t, –truncate-set1
Truncar o conjunto1 no mesmo comprimento do conjunto2
–help
Mostrar a ajuda do comando e sair
–version
Mostrar informações de versão e sair.
Como especificar os conjuntos de caracteres
Podemos representar os conjuntos de caracteres a serem tratados pelo comando tr usando as seguintes “classes” de caracteres:
\b Backspace
\f Form feed
\n New line
\r Carriage return
\t Tabulação
\v Tabulação vertical
a-a Faixa de caracteres. Representa uma faixa de caracteres entre os caracteres apresentados, incluindo-os e em ordem ascendente, como definido pela sequência de colação do sistema
[:classe:] Representa todos os caracteres que pertençam à classe apresentada. Classes comuns são:
Classe | Significado |
alnum | Caracteres alfanuméricos |
alpha | Caracteres alfabéticos |
blank | Espaços em branco |
digit | Caracteres numéricos |
graph | Caracteres gráficos |
lower | Caracteres minúsculos |
Caracteres imprimíveis | |
punct | Caracteres de pontuação |
special | Caracteres especiais |
upper | Caracteres em maiúsculas |
xdigit | Caracteres hexadecimais |
Qualquer outro caractere que não foi descrito na tabela representará a si próprio.
Exemplos
1. Substituir todas as ocorrências do caracter w por v no arquivo teste1, gerando o arquivo de saída teste2:
$ tr 'w' 'v' < teste1 > teste2
2. Colocar todos os caracteres de um arquivo chamado propaganda.txt em maiúsculas:
$ tr 'a-z' 'A-Z' < propaganda.txt > propaganda-M.txt
3. Vamos excluir todas as ocorrências do caractere # do arquivo teste.conf, gerando um novo arquivo teste2.conf. Isso equivale a descomentar todas as linhas de um arquivo de texto. Usaremos a opção -d para isso:
$ tr -d '#' < teste.conf > teste2.conf
4. Vamos arrumar um arquivo que contém um erro comum: caracteres repetidos em sequência. Por exemplo, vamos transformar todas as ocorrências da string ff no caracter único f no arquivo teste1, produzindo o arquivo teste2. Usaremos a opção -s do comando (squeeze):
$ tr -s 'ff' < teste1 > teste2
5. Excluir todos os caracteres de um arquivo chamado memorando, exceto letras maiúsculas. Usaremos a opção -d combinada com -c, que é o complemento – significa que excluiremos tudo EXCETO o conjunto de caracteres que será fornecido – no caso, A-Z:
$ tr -dc 'A-Z' < memorando > memorando2
Existem diversos outros comandos que podem ser usados para tratar arquivos dessa forma, tais como sed, awk, cut, que serão abordados em outros artigos.
Até mais!
Finalmente entendi esse comando, muitíssimo obrigado.
Olá, sou iniciante.
tenho um arquivo que possui os símbolos a seguir:
®
熊猫家百货商场
✔
⭐⭐⭐⭐⭐
❤️
✅
nesse caso teria que usar o [:classe:] ?