Overview
no Linux, existem muitos utilitários de linha de comando para manipulação de texto à nossa disposição. Neste tutorial, discutiremos o comando tr.
Introdução ao comando tr
tr é o diminutivo de “traduzir”. É um membro do pacote GNU coreutils. Portanto, está disponível em todos os distros Linux.
o comando tr lê um fluxo de ‘bytes’ a partir da entrada padrão (stdin), traduz ou apaga caracteres, em seguida, escreve o resultado para a saída padrão (stdout).,
a sintaxe de uso de tr é bastante simples:
tr SET1
Se não passarmos quaisquer opções para tr, ele irá substituir cada caractere em SET1 por cada caractere na mesma posição em SET2.
Uma vez que o tr não suporta ler um ficheiro directamente, se o quisermos aplicar a um ficheiro de texto, precisamos de canalizar o conteúdo do ficheiro para tr ou redireccionar o ficheiro para stdin.,
podemos usar o tr para executar texto transformações como:
- caractere de conversão de maiúsculas e minúsculas
- apertando a repetição de caracteres
- apagar caracteres específicos
- texto básico de substituição
Vamos ver alguns exemplos para aprender a manipular o texto usando a tr.
Converter minúsculas para maiúsculas
vamos começar com um problema básico: converter todos os caracteres minúsculos para maiúsculas num ficheiro.,
Let’s have a look at how to solve the problem using the tr command:
$ cat baeldung.urlwww.baeldung.com$ tr 'a-z' 'A-Z' < baeldung.urlWWW.BAELDUNG.COM
In The example above, we redirected a file baeldung.url para stdin e pediu tr para fazer a conversão do caso. Nós usamos gamas de caracteres em ambos SET1 e SET2 para fazer a conversão de caso.
Alternativamente, também podemos resolver o problema usando um par de conjunto de caracteres de aliases:
$ tr '' '' < baeldung.url WWW.BAELDUNG.COM
Devido a tr só escreve o resultado para stdout, após executá-lo, o nosso baeldung.o ficheiro url não foi alterado., Se queremos ser traduzido resultado para ser gravada para o arquivo de entrada, podemos redireciona stdout para um arquivo temporário e, em seguida, mudar o nome e substituir o arquivo de entrada:
$ tr 'a-z' 'A-Z' < baeldung.url >tmp.txt && mv tmp.txt baeldung.url $ cat baeldung.urlWWW.BAELDUNG.COM
Basic Localizar e Substituir
O tr utilitário é útil para algumas simples “localizar e substituir” operações onde um personagem, deve ser substituída por outra. Por exemplo, vamos substituir todos os hifens por sublinhados em um arquivo:
$ cat env.txt$JAVA-HOME and $MAVEN-HOME are system variables.$ cat env.txt | tr '-' '_'$JAVA_HOME and $MAVEN_HOME are system variables.
em vez de usar redirecionamento, usamos o comando cat para canalizar o conteúdo da env de arquivos.txt para tr.,
In addition to finding and replacing a single character, tr can do multiple character replacement as well. Vamos ver outro exemplo de tradução de chavetas para parêntesis:
$ echo "{baeldung}" | tr '{}' '()'(baeldung)
também podemos usar tr para fazer a tradução do intervalo de caracteres., mensagem”) usando tr:
neste exemplo, vamos usar o simples cifra de César como o nosso algoritmo de criptografia: substituir cada letra de entrada de texto através de uma carta que um número fixo de posições abaixo o alfabeto, por exemplo, a alteração de “um” para “e”, mudando-o de “b” para “f “, e assim por diante:
$ echo "this is a secret message" | tr 'a-z' 'e-zabcd' > secret.txt$ cat secret.txtxlmw mw e wigvix qiwweki
Para descriptografar o arquivo secreto, nós exchange SET1 e SET2 no tr comando acima:
$ tr 'e-zabcd' 'a-z' < secret.txt this is a secret message
Truncar um Padrão de Busca
quando analisamos os exemplos na seção anterior, percebe-se que SET1 e SET2 passamos a tr, sempre tinha o mesmo comprimento.,
Let’s see what tr will give us if SET2 is shorter than SET1:
$ echo "abcdefg" | tr 'abcdefg' 'ABC'ABCCCCC
When SET2 is shorter than SET1, the tr command will, by default, repeat the last character of SET2. Portanto, vemos na saída acima, a última letra em SET2, que é um “C”, é repetida para corresponder letras de “d” A “g”. Então o comando se transforma em tr ‘abccccc’.,
podemos usar a truncar a opção “-t” para alterar esse comportamento padrão, para deixar tr limite correspondente ao comprimento de SET2:
$ echo "abcdefg" | tr -t 'abcdefg' 'ABC' ABCdefg
Aperte a Repetição de Caracteres
Nós podemos remover instâncias repetidas de um personagem usando tr com o squeeze opção “-s”.
Let’s see an example of converting multiple continuous spaces to a single space:
$ echo 'Hi, nice to meet you!' | tr -s ' ' Hi, nice to meet you!
If we pass the-s option together with SET1 and SET2 to tr, it will first do the translation, then squeeze repeated characters in SET2., Por exemplo:
$ echo 'TODAYYYY IIIS SOOO COOOLD ~' | tr -s 'A-Z' 'a-z' today is so cold ~
Apagar Caracteres Específicos
Nós pode passar a opção “-d” para tr para eliminar caracteres SET1.
não como a opção “- s”, quando passamos”- d ” juntamente com SET1 e SET2 para tr, O SET2 será ignorado e nenhuma tradução será feita.
Por exemplo, para excluir todas as letras minúsculas do texto de entrada:
$ echo "A a B b C c" | tr -d 'a-z'A B C
Pesquise o Complemento da SET1
Nós pode passar a opção “-c” para tr, para torná-lo procurar um complemento de SET1., Procurar o complemento do SET1 significa procurar o inverso do SET1.
às vezes esta opção pode simplificar a definição de SET1.
Por exemplo, gostaríamos de combinar qualquer caractere que não seja uma letra minúscula e traduzi-lo em espaços em branco:
$ echo "#aMvery~handy tool" | tr -c 'a-z' ' 'tr is a very handy tool
também podemos combinar a opção “- c” com “- d” ou “- s”. O próximo exemplo mostra como podemos extrair o número de identificação do cliente.ficheiro csv:
no exemplo acima, temos de incluir o carácter newline (\n) no SET1., Caso contrário, todas as quebras de linha no arquivo de entrada serão excluídos também, e teremos todos os números de id concatenados juntos em uma única linha. Não é isto que queremos.
conclusão
neste artigo, aprendemos a usar o comando tr através de vários exemplos.
o comando tr é uma boa escolha se precisamos fazer alguma transformação de texto fundamental, como a conversão de caso ou apertar caracteres repetitivos.
no entanto, se estamos enfrentando problemas complexos de processamento de texto, devemos pensar em utilitários mais poderosos como awk ou sed.