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!
Escreva um comentário