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
psoudf. - 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!