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:  Como clicar com o botão direito em qualquer Mac usando um trackpad, rato ou teclado

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:  O que é o coreauthd e por que ele está sendo executado no meu Mac?

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:  Por que você não deve usar o servidor DNS padrão do seu ISP

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.