Como usar o comando rev no Linux

Terminal Linux em um laptop Ubuntu.
Fatmawati Achmad Zaenuri / Shutterstock

O revcomando do Linux  inverte cadeias de texto. Este comando pode operar no texto fornecido ou em um arquivo e parece extremamente simples. Mas, como muitos utilitários de linha de comando, seu poder real se torna aparente quando você o combina com outros comandos.

O revcomando é um daqueles utilitários simples do Linux que, à primeira vista, parece algo estranho. Ele executa uma única função: inverte strings. E além de poder imprimir uma página de ajuda rápida ( -h) e mostrar seu número de versão ( -V), ele não aceita nenhuma opção de linha de comando .

Então,  revinverte as cordas, e é isso? Sem variações ou opções? Bem, sim e não. Sim, não tem permutações, mas não, isso dificilmente é tudo. Este tutorial mostra como combiná-lo para operações poderosas.

Quando você o usa  rev como um bloco de construção em sequências de comando mais complicadas, ele realmente começa a mostrar seu valor. revfaz parte de um grupo de comandos (como  tace yes) que são facilitadores. É mais fácil apreciar sua utilidade quando você vê como eles tornam o uso de outros comandos mais eficiente.

Usando o comando rev

Usado na linha de comando sem outros parâmetros, revpega qualquer entrada digitada, reverte-a e a imprime na janela do terminal. Ele continua fazendo isso até que você pressione Ctrl + C para sair.

rev

"rev" usado com "stdin" em uma janela de terminal.

Se você digitar algum texto e pressionar Enter, isso revimprimirá a string ao contrário – a menos que você forneça um palíndromo , é claro.

"rev" com um palíndromo em uma janela de terminal.

Passando texto para rev

Você pode usar echopara enviar texto para rev.

echo um dois três | rev

"echo one two three | rev" em uma janela de terminal.

Você também pode usar revpara inverter o conteúdo de um arquivo de texto inteiro, linha por linha. Neste exemplo, temos um arquivo contendo uma lista de nomes de arquivos. O arquivo é denominado “filelist.txt”.

rev filelist.txt

"rev filelist.txt" em uma janela de terminal.

Cada linha é lida do arquivo, revertida e impressa na janela do terminal.

Recomendado:  O botão esquerdo do mouse não funciona? Veja como consertar

Combinando rev com outros comandos

Aqui está um exemplo usando tubulação de entrada que chama revduas vezes.

Este comando remove o último caractere da string de texto. Isso pode ser útil para remover a pontuação. Precisamos usar o cutcomando para retirar o personagem .

echo 'Remover pontuação.' | rev | cut -c 2- | rev

"echo 'Remover pontuação.'  | rev | cut -c 2- | rev "em uma janela de terminal.

Vamos decompô-lo.

  • echoenvia a string na primeira chamada para rev.
  • revinverte a corda e a canaliza cut.
  • A -copção (caracteres) informa cutpara retornar uma sequência de caracteres da string.
  • A 2-opção informa cut para retornar o intervalo de caracteres do caractere dois até o final da linha. Se um segundo número fosse fornecido, como 2-5, o intervalo seria de dois a cinco caracteres. Nenhum segundo número significa “até o fim da string”.
  • A string invertida – menos seu primeiro caractere – é passada para a revqual inverte a string, então ela volta à sua ordem original.

Como cortamos o primeiro caractere da string invertida , cortamos o último caractere da string original . Sim, você pode fazer isso com sedou awk, mas esta é uma sintaxe mais fácil.

Separando a última palavra

Podemos usar um truque semelhante para retornar a última palavra da linha.

O comando é semelhante ao último: novamente, ele usa  revduas vezes. As diferenças residem na maneira como o cutcomando é usado para selecionar partes do texto.

echo 'Separe a última palavra' | rev | cut -d '' -f1 | rev

"echo 'Separe a última palavra' | rev | cut -d '' -f1 | rev" em uma janela de terminal.

Aqui está a análise do comando:

  • echoenvia a string na primeira chamada para rev.
  • revinverte a corda e a canaliza cut.
  • A -d' ' opção (delimitador) informa cutpara retornar uma sequência de caracteres delimitados por um espaço.
  • A -f1 opção diz cut para retornar a primeira seção da string que não contém o delimitador. Ou seja, da primeira parte da frase até o primeiro espaço.
  • A primeira palavra invertida é passada para a revqual inverte a string, de forma que ela volte à sua ordem original.
Recomendado:  Como atualizar manualmente seu dispositivo Nexus com imagens de fábrica do Google

Como extraímos a primeira palavra da string invertida , eliminamos a última palavra da string original . A última palavra da frase foi “palavra” e foi impressa para nós.

Cortando conteúdo de arquivos

Digamos que temos um arquivo contendo uma lista de nomes de arquivos e os nomes de arquivos estão entre aspas. Queremos remover as aspas dos nomes dos arquivos.

Vejamos o arquivo:

menos filelist.txt

"less filenames.txt" em uma janela de terminal.

O conteúdo do arquivo é exibido para nós em less.

Conteúdo de filenames.txt em menos em uma janela de terminal.

Podemos remover a pontuação de ambas as extremidades de cada linha com o seguinte comando. Este comando usa tanto  rev e  cutduas vezes.

rev filelist.txt | cut -c 2- | rev | cut -c 2-

"rev filelist.txt | cut -c 2- | rev | cut -c 2-" em uma janela de terminal.

Os nomes dos arquivos são listados para nós sem as aspas.

Nomes de arquivos sem aspas em uma janela de terminal.

O comando se divide assim:

  • rev inverte as linhas no arquivo e as direciona para cut.
  • A -copção (caracteres) informa cutpara retornar uma seqüência de caracteres de cada linha.
  • A 2-opção informa cut para retornar o intervalo de caracteres do caractere dois até o final de cada linha.
  • As strings invertidas, sem seus primeiros caracteres, são passadas para rev.
  • revinverte as cordas, para que elas voltem à ordem original. Eles são canalizados cutuma segunda vez.
  • A -copção (caracteres) informa cutpara retornar uma sequência de caracteres de cada string.
  • A 2-opção informa cut para retornar o intervalo de caracteres do caractere dois até o final de cada linha. Isso “salta sobre” a aspa inicial, que é o caractere um em cada linha.

Muita tubulação

Este é um comando que retorna uma lista classificada de cada extensão de arquivo no diretório atual. Ele usa cinco comandos Linux distintos.

ls | rev | cut -d '.' -f1 | rev | classificar | uniq

"ls | rev | cut -d '.'  -f1 | rev | sort | uniq "em uma janela de terminal.

O processo é direto:

  • ls lista os arquivos no diretório atual. Estes são canalizados para rev.
  • revinverte os nomes dos arquivos e os direciona para cut.
  • cutretorna a primeira parte de cada nome de arquivo até um delimitador. O -d'.' diz cutpara usar o ponto final “.” como o delimitador. A parte dos nomes de arquivo invertidos até o primeiro período são as extensões de arquivo. Estes são canalizados para rev.
  • revreverte as extensões de arquivo em sua ordem original. Eles são canalizados sort.
  • sortclassifica as extensões de arquivo e canaliza os resultados para uniq.
  • uniqretorna uma única lista para cada tipo de extensão de arquivo exclusiva. Observe que se não houver extensão de arquivo (como para o makefile e os diretórios Help e gc_help), todo o nome do arquivo será listado.
Recomendado:  Como usar o Pushbullet para sincronizar todos os tipos de coisas entre o seu PC e o telefone Android

Para dar um toque final a ele, adicione a -copção de linha de comando (contagem) ao uniqcomando.

ls | rev | cut -d '.' -f1 | rev | classificar | uniq -c

"ls | rev | cut -d '.'  -f1 | rev | sort | uniq -c "em uma janela de terminal.

Agora obtemos uma lista ordenada dos diferentes tipos de arquivo no diretório atual com uma contagem de cada um.

Essa é uma linha muito bacana!

drawroF og ot drawkcaB gnioG

Às vezes você tem que voltar para frente. E você geralmente avança mais rápido como parte de uma equipe.

Adicione revao seu repertório de comandos go-to, e em breve você o estará usando para simplificar sequências de comandos complicadas.