Ferramentas úteis e pouco conhecidas do Linux: Melhore sua produtividade com comandos ocultos

O mundo da linha de comando do Linux é cheio de surpresas. Além das ferramentas bem conhecidas, existem muitos pequenos comandos que possuem funcionalidades únicas e podem melhorar significativamente a eficiência em certos cenários. Este artigo apresenta seis ferraemntas pouco conhecidas, mas úteis: nl, column, shuf, jq, fmt e rev, explorando como elas podem ser usadas para manipular textos.

Se você estiver interessado em mais comandos de manipulação de texto, recomendamos conferir meu artigo anterior: 6 comandos de processamento de texto do Linux para aumentar a produtividade em 200% (paste, xargs, pr, join, tr, fold).

1. nl: Adicione números às linhas de texto

1.1 Descrição do comando

O nl (number lines) é uma ferramenta útil para adicionar números às linhas de um texto, ideal para organizar documentos, depurar saídas ou gerar listas numeradas.

1.2 Sintaxe básica

nl [opções] [arquivo]


1.3 Opções comuns

  • -b TYPE: Define o estilo de numeração (a - todas as linhas, t - apenas linhas não vazias, n - não numerar).
  • -n FORMAT: Define o formato do número (ln - alinhado à esqeurda, rn - alinhado à direita, rz - alinhado à direita com zeros).
  • -w WIDTH: Define a largura dos números.
  • -s SEP: Define o separador entre o número e o texto.
  • -v NUM: Define o número inicial.
  • --help: Exibe ajuda.

1.4 Exemplos básicos

file.txt:

apple

banana
cherry


Exemplo 1: Numeração padrão
nl file.txt


Saída:

     1  apple
         
     2  banana
     3  cherry


Explicação: Linhas vazias não são numeradas, os números são alinhados à direita.

Exemplo 2: Numerar apenas linhas não vazias
nl -b t file.txt


Saída:

     1  apple
     2  banana
     3  cherry


Exemplo 3: Formato personalizado de numeração
nl -n rz -w 3 -s ": " file.txt


Saída:

001: apple
        
002: banana
003: cherry


1.5 Uso avançado

Exemplo 4: Começar a partir de um número específico
nl -v 100 file.txt


Saída:

   100  apple
        
   101  banana
   102  cherry


Exemplo 5: Numerar um script

script.sh:

#!/bin/bash
echo "Starting"
sleep 1
echo "Processing"


nl -s " | " script.sh


Saída:

     1 | #!/bin/bash
     2 | echo "Starting"
     3 | sleep 1
     4 | echo "Processing"


Exemplo 6: Combinar com tail para ver logs
tail -n 5 /var/log/syslog | nl


Saída: Adiciona números às últimas cinco linhas do log do sistema.

1.6 Cenários de uso real

  • Organização de documentos: Adicionar números a tutoriais ou relatórios para facilitar referências.
  • Revisão de código: Marcar linhas de scripts para discussões.
  • Análise de logs: Localizar informações importantes em múltiplas linhas de logs rapidamente.

2. column: Organize o formato de texto em colunas

2.1 Descrição do comando

O column transforma texto desordenado em saídas organizadas em colunas, aumentando significativamente a legibilidade, especialmente para dados tabulares ou listas.

2.2 Sintaxe básica

column [opções] [arquivo]


2.3 Opções comuns

  • -t: Gera automaticamente uma tabela.
  • -s DELIM: Define o delimitador.
  • -c WIDTH: Define a largura da saída.
  • -x: Preenche colunas por linhas.
  • -o SEP: Define o separador entre colunas.
  • --help: Exibe ajuda.

2.4 Exemplos básicos

data.txt:

name age city
Alice 25 NewYork
Bob 30 London


Exemplo 1: Formatar como tabela
column -t data.txt


Saída:

name   age  city
Alice  25   NewYork
Bob    30   London


Exemplo 2: Trabalhar com arquivos CSV

data.csv:

name,age,city
Alice,25,NewYork
Bob,30,London


column -t -s ',' data.csv


Saída:

name   age  city
Alice  25   NewYork
Bob    30   London


Exemplo 3: Limitar a largura da saída
column -t -c 20 data.txt


Saída:

name  age  city
Alice 25   NewYork
Bob   30   London


2.5 Uso avançado

Exemplo 4: Formatar saída de comandos
df -h | column -t


Saída: Organiza informações de uso de disco em uma tabela clara.

Exemplo 5: Definir separador de colunas
column -t -s ',' -o ' | ' data.csv


Saída:

name  | age | city
Alice | 25  | NewYork
Bob   | 30  | London


Exemplo 6: Disposição em colunas de lista de arquivos
ls -1 | column -c 80


Saída: Lista de arquivos disposta em colunas, ajustada para 80 caracteres.

2.6 Cenários de uso real

  • Visualização de dados: Formatar conteúdo de arquivos CSV ou TSV.
  • Monitoramento do sistema: Organizar saídas de ps ou df.
  • Geração de relatórios: Criar tabelas claras rapidamente.

3. shuf: Embaralhe linhas de texto

3.1 Descrição do comando

O shuf (shuffle) é usado para embaralhar linhas de texto ou gerar sequências aleatórias, sendo muito útil para amostragem de dados, testes ou seleção aleatória.

3.2 Sintaxe básica

shuf [opções] [arquivo]


3.3 Opções comuns

  • -n NUM: Saída de um número especificado de linhas.
  • -i LO-HI: Gera números inteiros aleatórios em um intervalo.
  • -r: Permite amostragem com repetição.
  • -o FILE: Salva resultados em um arquivo.
  • -z: Separa linhas com caractere nulo.
  • --help: Exibe ajuda.

3.4 Exemplos básicos

list.txt:

apple
banana
cherry


Exemplo 1: Embaralhar linhas
shuf list.txt


Saída (possível):

cherry
apple
banana


Exemplo 2: Pegar primeiras N linhas
shuf -n 2 list.txt


Saída (possível):

banana
apple


Exemplo 3: Gerar números aleatórios
shuf -i 1-10 -n 3


Saída (possível):

7
2
9


3.5 Uso avançado

Exemplo 4: Amostragem com repetição
shuf -r -n 5 list.txt


Saída (possível):

apple
banana
apple
cherry
banana


Exemplo 5: Selecionar um arquivo aleatório
ls *.txt | shuf -n 1


Saída: Retorna um nome de arquivo .txt aleatório.

Exemplo 6: Salvar resultados aleatórios
shuf -i 1-100 -n 10 -o random.txt


Gera 10 números aleatórios e salva-os no arquivo random.txt.

3.6 Cenários de uso real

  • Teste de dados: Gerar amostras para validar programas.
  • Sorteio: Selecionar aleatoriamente de uma lista.
  • Apoio ao aprendizado: Embaralhar ordem de exercícios para aumentar desafios.

4. jq: Ferramenta poderosa para processar JSON

4.1 Descrição do comando

O jq é uma ferramenta poderosa para manipular dados JSON na linha de comando, permitindo analisar, filtrar, converter e gerar dados JSON. Embora não seja tão conhecido quanto cat ou grep, ele é extremamente eficiente ao lidar com dados estruturados.

4.2 Sintaxe básica

jq [opções] 'expressão' [arquivo]


4.3 Opções comuns

  • -r: Saída de strings sem aspas.
  • -c: Saída compacta (em uma linha).
  • -M: Saída formatada.
  • -s: Combina entradas múltiplas em um array.
  • --help: Exibe ajuda.

4.4 Exemplos básicos

data.json:

{"name": "Alice", "age": 25, "city": "NewYork"}


Exemplo 1: Extrair campos
jq '.name' data.json


Saída:

"Alice"


Exemplo 2: Saída de string sem aspas
jq -r '.name' data.json


Saída:

Alice


Exemplo 3: Trabalhar com arrays

array.json:

[1, 2, 3]


jq '.[]' array.json


Saída:

1
2
3


4.5 Uso avançado

Exemplo 4: Filtrar dados

users.json:

[{"name": "Alice", "age": 25}, {"name": "Bob", "age": 30}]


jq '.[] | select(.age > 25)' users.json


Saída:

{
  "name": "Bob",
  "age": 30
}


Exemplo 5: Converter dados
jq '[.[] | .age * 2]' array.json


Saída:

[2, 4, 6]


Exemplo 6: Extrair dados de saída de comandos
curl -s 'https://api.example.com/data' | jq '.result'


Saída: Extrai o campo result da resposta da API.

4.6 Cenários de uso real

  • Processamento de dados de APIs: Analisar e extrair respostas JSON.
  • Gerenciamento de configurações: Visualizar ou modificar arquivos de configuração JSON.
  • Análise de dados: Filtrar e transformar dados estruturados.

5. fmt: Otimize o formato do texto

5.1 Descrição do comando

O fmt (format) reorganiza o texto, ajustando a largura das linhas ou otimizando parágrafos, sendo útil para formatação de documentos ou tratamento de textos longos.

5.2 Sintaxe básica

fmt [opções] [arquivo]


5.3 Opções comuns

  • -w WIDTH: Define a largura máxima das linhas.
  • -s: Apenas quebra linhas longas, não mescla linhas curtas.
  • -u: Uniformiza espaçamento entre palavras.
  • -p PREFIX: Formata apenas linhas com prefixo especificado.
  • --help: Exibe ajuda.

5.4 Exemplos básicos

text.txt:

This is a very long line that needs formatting to improve readability and structure.


Exemplo 1: Formatação padrão
fmt text.txt


Saída (largura padrão de 75 caracteres):

This is a very long line that needs formatting to improve
readability and structure.


Exemplo 2: Definir largura da linha
fmt -w 30 text.txt


Saída:

This is a very long line that
needs formatting to improve
readability and structure.


Exemplo 3: Uniformizar espaçamento
echo "This   is    spaced" | fmt -u


Saída:

This is spaced


5.5 Uso avançado

Exemplo 4: Quebrar apenas linhas longas
fmt -s -w 20 text.txt


Saída:

This is a very long
line that needs
formatting to
improve readability
and structure.


Exemplo 5: Formatar comentários de código

code.c:

// This is a very long comment that needs to be wrapped properly for clarity.


fmt -w 40 -p "//" code.c


Saída:

// This is a very long comment that
// needs to be wrapped properly for
// clarity.


Exemplo 6: Formatar em lote
fmt -w 80 *.txt > formatted.txt


5.6 Cenários de uso real

  • Ajuste de documentos: Otimizar arquivos de texto ou Markdown.
  • Redação de e-mails: Formatar texto para clientes de e-mail.
  • Formatação de código: Organizar comentários ou descrições longas.

6. rev: Inverta a ordem dos caracteres

6.1 Descrição do comando

O rev (reverse) inverte a ordem dos caracteres em cada linha, sendo simples, porém útil, para conversão de dados ou operações divertidas.

6.2 Sintaxe básica

rev [arquivo]


6.3 Opções comuns

Funcionalidade simples, sem opções complexas.

  • --help: Exibe ajuda.

6.4 Exemplos básicos

words.txt:

hello
world


Exemplo 1: Inversão básica
rev words.txt


Saída:

olleh
dlrow


Exemplo 2: Entrada via pipe
echo "Linux" | rev


Saída:

xuniL


Exemplo 3: Salvar resultados invertidos
rev < words.txt > reversed.txt


6.5 Uso avançado

Exemplo 4: Combinar com cut
echo "name:Alice" | cut -d':' -f2 | rev


Saída:

ecilA


Exemplo 5: Inversão dupla
echo "hello" | rev | rev


Saída:

hello


Explicação: Verifica a reversibilidade da operação.

Exemplo 6: Inverter nomes de arquivos
ls -1 *.txt | rev


Saída: Mostra nomes de arquivos invertidos.

6.6 Cenários de uso real

  • Codificação de dados: Gerar códigos simples por meio de inversão de campos.
  • Demonstração didática: Mostrar princípios de operações de caracteres.
  • Jogos de texto: Criar efeitos divertidos de inversão.

Conclusão

A riqueza da caixa de ferramentas da linha de comando do Linux é maior do que se imagina. Essas ferramentas ocultas — nl, column, shuf, jq, fmt e rev — embora não sejam amplamente conhecidas, têm um grande potencial em certos cenários. De adicionar números a textos até analisar dados JSON, de embaralhar sequências até otimizar formatos, elas oferecem soluções flexíveis e eficientes para tarefas cotidianas. Integrar essas ferramentas ao seu fluxo de trabalho, combinando-as com outros comandos, revelará o potencial infinito da linha de comando. Explore sempre, e quando enfrentar tarefas difíceis, considere usar essas ferramentas ocultas — talvez você descubra algo inesperado!

Tags: Linux shell command-line text-processing JSON

Publicado em 8-23 22:48