Comando tr do Linux: Tradução de Caracteres

LinuxBeginner
Pratique Agora

Introdução

Neste laboratório, exploraremos o comando tr no Linux, um utilitário versátil para transformar texto ao nível de caractere. O comando tr, abreviação de "translate" (traduzir), é amplamente utilizado para tarefas como conversão de maiúsculas/minúsculas, remoção de caracteres específicos e limpeza básica de dados. Ao final deste laboratório, você será proficiente no uso do tr para diversos cenários de manipulação de texto. Este laboratório foi projetado para iniciantes, então não se preocupe se você é novo nos comandos do Linux - nós o guiaremos cuidadosamente por cada etapa.

Entendendo o básico do tr

Vamos começar entendendo a sintaxe básica do comando tr:

tr [OPTION]... SET1 [SET2]

O comando tr lê texto da entrada padrão (stdin), transforma-o de acordo com as opções e conjuntos de caracteres especificados e escreve o resultado na saída padrão (stdout).

Vamos começar com um exemplo simples. Criaremos um arquivo chamado greeting.txt com uma mensagem de saudação básica e, em seguida, usaremos o tr para converter todas as letras minúsculas em maiúsculas.

Primeiro, crie o arquivo:

echo "hello, world" > ~/project/greeting.txt

Dicas: Você pode copiar e colar os comandos de criação de arquivo no terminal para criá-los corretamente.

Este comando cria um novo arquivo chamado greeting.txt no seu diretório de projeto (~/project/) com o conteúdo "hello, world".

Agora, vamos usar o tr para converter todas as letras minúsculas em maiúsculas:

cat ~/project/greeting.txt | tr 'a-z' 'A-Z'

Você deverá ver a seguinte saída:

HELLO, WORLD

Vamos analisar este comando:

  1. cat ~/project/greeting.txt: Isso lê o conteúdo do arquivo.
  2. |: Este é um símbolo de pipe (tubulação). Ele pega a saída do comando à sua esquerda e a fornece como entrada para o comando à sua direita.
  3. tr 'a-z' 'A-Z': Este é o nosso comando tr. Ele traduz cada caractere no primeiro conjunto ('a-z', que representa todas as letras minúsculas) para o caractere correspondente no segundo conjunto ('A-Z', que representa todas as letras maiúsculas).

Observe que este comando não modifica o arquivo original. Se você quiser salvar o texto transformado, precisará redirecionar a saída para um novo arquivo.

Excluindo caracteres com o tr

O comando tr também pode excluir caracteres específicos da entrada. Isso é particularmente útil quando você precisa limpar o texto removendo caracteres indesejados. Vamos criar um arquivo com alguma pontuação e, em seguida, removê-la.

Primeiro, crie um arquivo com pontuação:

echo "Hello, World! How are you?" > ~/project/punctuated.txt

Dicas: Você pode copiar e colar os comandos de criação de arquivo no terminal para criá-los corretamente.

Agora, vamos usar o tr para remover toda a pontuação:

cat ~/project/punctuated.txt | tr -d '[:punct:]'

Você deverá ver:

Hello World How are you

Vamos analisar este comando:

  1. cat ~/project/punctuated.txt: Isso lê o conteúdo do arquivo.
  2. |: Isso envia a saída para o comando tr.
  3. tr -d '[:punct:]':
    • A opção -d diz ao tr para excluir os caracteres especificados.
    • [:punct:] é uma classe de caractere que representa todos os caracteres de pontuação. Classes de caracteres são conjuntos predefinidos de caracteres que facilitam a especificação de grupos de caracteres.

Este comando remove todos os caracteres de pontuação do texto, deixando apenas letras, números e espaços.

Traduzindo múltiplos caracteres

Agora vamos explorar uma tradução mais complexa. Criaremos um arquivo com um texto codificado e usaremos o tr para decodificá-lo. Este exemplo demonstra como o tr pode ser usado para criptografia e descriptografia simples.

Primeiro, crie um arquivo com texto codificado:

echo "Uijt jt b tfdsfu nfttbhf." > ~/project/encoded.txt

Dicas: Você pode copiar e colar os comandos de criação de arquivo no terminal para criá-los corretamente.

Agora, vamos decodificá-lo:

cat ~/project/encoded.txt | tr 'b-zaB-ZA' 'a-zA-Z'

Você deverá ver:

This is a secret message.

Vamos analisar este comando:

  1. cat ~/project/encoded.txt: Isso lê o conteúdo do arquivo codificado.
  2. |: Isso envia a saída para o comando tr.
  3. tr 'b-zaB-ZA' 'a-zA-Z':
    • O primeiro conjunto b-zaB-ZA combina dois alfabetos deslocados:
      • b-za: letras minúsculas de b a z, seguidas por a
      • B-ZA: letras maiúsculas de B a Z, seguidas por A
    • Juntos, eles cobrem cada letra que deve ser deslocada uma posição para trás.
    • O segundo conjunto a-zA-Z é: letras minúsculas de a a z, seguidas por letras maiúsculas de A a Z.
    • Isso cria um mapeamento onde cada letra no primeiro conjunto é substituída pela letra correspondente no segundo conjunto:
      • b (1ª no primeiro conjunto) → a (1ª no segundo conjunto)
      • c (2ª no primeiro conjunto) → b (2ª no segundo conjunto)
      • ...
      • a (26ª no primeiro conjunto) → z (26ª no segundo conjunto)
      • B (27ª no primeiro conjunto) → A (27ª no segundo conjunto)
      • ...
      • A (52ª no primeiro conjunto) → Z (52ª no segundo conjunto)
    • Isso efetivamente desloca cada letra na entrada uma posição para trás no alfabeto, tanto para caracteres minúsculos quanto maiúsculos, o que decodifica corretamente a mensagem.

Este tipo de substituição é uma forma muito simples de criptografia chamada cifra de César. Embora não seja segura para uso no mundo real, é um ótimo exemplo de como o tr pode ser usado para substituição caractere por caractere.

Usando classes de caracteres com o tr

O comando tr suporta várias classes de caracteres, que são conjuntos predefinidos de caracteres. Eles podem ser muito úteis para transformações de texto mais complexas. Vamos usar alguns deles em um cenário prático.

Primeiro, crie um arquivo com conteúdo misto:

echo "User123 logged in at 09:45 AM on 2023-08-15" > ~/project/log_entry.txt

Dicas: Você pode copiar e colar os comandos de criação de arquivo no terminal para criá-los corretamente.

Agora, vamos extrair apenas os dígitos desta entrada de log:

cat ~/project/log_entry.txt | tr -cd '[:digit:]'

Você deverá ver:

12309452023815

Vamos analisar este comando:

  1. cat ~/project/log_entry.txt: Isso lê o conteúdo do arquivo de log.
  2. |: Isso envia a saída para o comando tr.
  3. tr -cd '[:digit:]':
    • A opção -c complementa o conjunto (significando "não neste conjunto").
    • A opção -d exclui os caracteres especificados.
    • [:digit:] é uma classe de caractere que representa todos os dígitos (0-9).
    • Juntos, -cd '[:digit:]' significa "excluir todos os caracteres que não são dígitos".

Este comando é útil para extrair dados numéricos de textos mistos, o que pode ser útil em análises de log ou tarefas de limpeza de dados.

Comprimindo repetições com o tr

O comando tr também pode "comprimir" (squeeze) caracteres repetidos em uma única ocorrência. Isso é útil para limpar dados com repetições desnecessárias. Vamos criar um arquivo com alguns caracteres repetidos e, em seguida, limpá-lo.

Primeiro, crie um arquivo com espaços repetidos:

echo "This    is    a    test    with    extra    spaces." > ~/project/spaced.txt

Dicas: Você pode copiar e colar os comandos de criação de arquivo no terminal para criá-los corretamente.

Agora, vamos usar o tr para comprimir os espaços repetidos:

cat ~/project/spaced.txt | tr -s ' '

Você deverá ver:

This is a test with extra spaces.

Vamos analisar este comando:

  1. cat ~/project/spaced.txt: Isso lê o conteúdo do arquivo com espaços extras.
  2. |: Isso envia a saída para o comando tr.
  3. tr -s ' ':
    • A opção -s comprime repetições do caractere especificado em uma única ocorrência.
    • ' ' especifica que queremos comprimir caracteres de espaço.

Este comando é particularmente útil ao lidar com dados mal formatados ou quando você precisa normalizar espaços em branco em um arquivo de texto.

Resumo

Neste laboratório, exploramos o versátil comando tr no Linux. Aprendemos como:

  1. Converter maiúsculas/minúsculas de texto
  2. Excluir caracteres específicos
  3. Traduzir múltiplos caracteres
  4. Usar classes de caracteres
  5. Comprimir caracteres repetidos

O comando tr é uma ferramenta poderosa para manipulação de texto. Aqui estão algumas opções adicionais que não cobrimos em detalhes:

  • -c: Complementa o conjunto de caracteres na string1, ou seja, opera em todos os caracteres que não estão na string1
  • -t: Trunca a string1 para o comprimento da string2

Para tarefas de processamento de texto mais avançadas, você pode querer explorar outros comandos como sed e awk em laboratórios futuros.