Comandos de Tratamento de Texto | DeServ – Info
Lomadee, uma nova esp閏ie na web. A maior plataforma de afiliados da Am閞ica Latina.

Comandos de Tratamento de Texto

By Fl谩vio Silva

Com toda a quantidade de arquivos textos existentes no Linux (documentos, configura莽玫es, listas), os comandos de tratamento de texto podem se tornar ferramentas 煤teis para a rotina di谩ria de um administrador de sistema.

sort 鈥 Ordena um arquivo alfabeticamente

Sintaxe: $ sort <arquivo>

Quando temos um arquivo com v谩rias linhas, por exemplo, um arquivo de nomes de usu谩rios, o sort pode servir para organizar este arquivo. Exemplo:

$ cat texto
Kioshi
Hugo
Adriana
Eitch
Danilo
$ sort texto
Adriana
Danilo
Eitch
Hugo
Kioshi

Os nomes foram organizados e o resultado 茅 jogado na tela. Ordenando o arquivo e escrevendo o resultado em outro arquivo:

$ sort texto > texto_organizado

Podemos tamb茅m ordenar de forma inversa, com o par芒metro -r:

$ sort -r texto
Kioshi
Hugo
Eitch
Danilo
Adriana
uniq 鈥 Elimina linhas repetidas
Sintaxe: $ uniq <arquivo>

Muitas vezes um arquivo de configura莽茫o tem v谩rias linhas em branco, ou um arquivo texto tem v谩rias linhas iguais que queremos eliminar. O uniq elimina as ocorr锚ncias de linhas repetidas, lembrando que as linhas iguais devem estar uma depois da outra para serem consideradas repetidas.

Exemplo:

$ cat texto
Kioshi
Hugo
Hugo
Adriana
Eitch
Danilo
Kioshi
Kioshi
$ uniq texto
Kioshi
Hugo
Adriana
Eitch
Danilo
Kioshi

Note que apesar do uniq ter eliminado as linhas duplicadas (Hugo e Kioshi do final do arquivo), o comando mesmo assim deixou a palavra Kioshi duas vezes no arquivo, pois eles est茫o em diferentes localiza莽玫es. Para resolver isto, combinamos com o sort:

$ sort texto | uniq
Adriana
Danilo
Eitch
Hugo
Kioshi

Desta forma, o sort primeiro ordenou as linhas, deixando as repetidas uma depois da outra, fazendo com que o uniq eliminasse essas linhas duplicadas.

grep 鈥 Procura texto e express玫es dentro de um arquivo

Sintaxe: $ grep <padr茫o> <arquivo1> [arquivo2] [arquivo3] ...

Quando temos arquivos com muitas informa莽玫es, mas queremos apenas extrair algo bem espec铆fico do conte煤do, utilizamos o grep. Ele procura por algum texto (um padr茫o) dentro de arquivos, retornando a linha correspondente ao desejado.

Por exemplo, quero identificar se existe o nome Hugo no arquivo de palavras (dicion谩rio) do sistema:

$ grep Hugo /usr/share/dict/words
Hugo
Hugo's

Por padr茫o, o grep diferencia mai煤sculas e min煤sculas, ent茫o se fizermos o comando anterior utilizando a palavra hugo em min煤sculo, o grep n茫o iria achar nada.

Para fazer uma pesquisa sem diferenciar mai煤sculas de min煤sculas, utilizamos o par芒metro -i:

$ grep -i ROOT /etc/passwd
root:x:0:0:root:/root:/bin/bash

Mostramos que o usu谩rio root existe no sistema, pois ele est谩 no arquivo /etc/passwd.

Para identificar em que linha do arquivo o grep achou o texto, utilizamos o par芒metro -n:

$ grep -in servername /etc/httpd/conf/httpd.conf
130:ServerName www.devin.com.br

O grep achou, na linha 130, a palavra servername e imprimiu na tela toda a linha.

Podemos tamb茅m especificar para o grep procurar recursivamente, ou seja, em um diret贸rio e todos os seus arquivos e sub-diret贸rios, utilizando o par芒metro -r:

$ grep -ri backup /home/coletivo

Para inverter o que o grep mostra, ou seja, imprimir as linhas que n茫o cont茅m o texto, basta utilizar o par芒metro -v:

$ grep -v root /etc/passwd
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
...corte...

O grep mostrou todas as linhas dos usu谩rios do sistema, menos a do usu谩rio root.

Tamb茅m podemos usar express玫es regulares para procurar certos padr玫es de texto em um arquivo. Por exemplo, mostrando todas as linhas de um arquivo que n茫o come莽am com o caracter # (ou seja, linhas que n茫o s茫o coment谩rios):

$ grep -v 鈥淾#鈥 /etc/apache2/apache2.conf
ServerRoot "/etc/apache2"
LockFile /var/lock/apache2/accept.lock
PidFile ${APACHE_PID_FILE}
Timeout 300
KeepAlive On
...corte...

Se verificarmos o arquivo, veremos que al茅m destas linhas, h谩 uma s茅rie de coment谩rios no arquivo, mas que n茫o foram mostradas pelo grep.

paste 鈥 Combina arquivos em um s贸

Sintaxe: $ paste <arquivo1> <arquivo2> [arquivo3] ...

Com este comando podemos unir v谩rios arquivos em um s贸, em formato de tabela, tornando o resultado algo parecido com uma planilha. Por exemplo, temos dois arquivos:

$ cat nomes
Coletivo Digital
Hugo Cisneiros (Eitch)
Linux
Tutorial
$ cat enderecos
email@coletivodigital.org.br
hugo@devin.com.br
www.kernel.org
www.google.com.br

Juntando os dois arquivos com o paste:

$ paste nomes enderecos
Coletivo Digital        email@coletivodigital.org.br
Hugo Cisneiros (Eitch)  hugo@devin.com.br
Linux   www.kernel.org
Tutorial        www.google.com.br

O paste juntou as linhas, separando os campos com TAB.

cut 鈥 Separa um arquivo por campos e imprime apenas partes especificadas

Sintaxe: $ cut [op莽玫es] <arquivo1>

Bom para quando quisermos isolar partes de linhas de um arquivo de configura莽茫o ou de arquivos de dados tabulados. Basicamente, o par芒metro -d especifica o delimitador de campos e o -f indica qual campo imprimir como resultado. Exemplo:

$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
...corte...
$ cut -d 鈥:鈥 -f 1 /etc/passwd
root
daemon
...corte...

Utilizamos como delimitador o caracter 鈥:鈥 (dois pontos), que 茅 o que separa os campos do arquivo de usu谩rios do sistema /etc/passwd. Informamos tamb茅m para o cut jogar como resultado apenas o campo de n煤mero um.

No par芒metro -f, podemos tamb茅m especificar faixas de campos, ao inv茅s de apenas um:

$ cut -d 鈥:鈥 -f 1,7 /etc/passwd
root:/bin/bash
daemon:/bin/sh
...corte...

Desta vez ele retornou os campos 1 e 7, que s茫o respectivamente o usu谩rio e a shell do usu谩rio. Outro exemplo:

$ cut -d ":" -f 1-4,7 /etc/passwd
root:x:0:0:/bin/bash
daemon:x:1:1:/bin/sh
...corte...

Desta vez ele imprimiu os campos de 1 a 4 (1, 2, 3 e 4), depois o campo 7.

tr 鈥 Transforma caracteres

Sintaxe: $ tr <origem> <destino>

Transforma caracteres em outros caracteres (ou os remove). Com o tr conseguimos fazer essa substitui莽茫o caracter por caracter, mas n茫o podemos utiliz谩-lo com um arquivo, mas apenas combinando com outros comandos.

Por exemplo, quero transformar todos os caracteres do arquivo nomes para mai煤sculo:

$ cat nomes
Coletivo Digital
Hugo Cisneiros (Eitch)
Linux
Tutorial
$ cat nomes | tr [:lower:] [:upper:]
COLETIVO DIGITAL
HUGO CISNEIROS (EITCH)
LINUX
TUTORIAL

sed 鈥 Filtragem e Transforma莽茫o de Conte煤do

Sintaxe: $ sed <comando/express茫o> <arquivo>

O sed 茅 um poderoso processador de texto que dentre muitas de suas a莽玫es, pode substituir ocorr锚ncias de texto por outros textos. Por exemplo, temos o texto:

$ cat texto

Eu adoro m煤sica. Acho que sem m煤sica eu n茫o seria nada, ficaria completamente triste, deprimido. Tamb茅m acredito que todo ser humano precisa de m煤sica, afinal n茫o importa o seu sabor, 茅 sempre bom!

Agora vamos substituir a palavra m煤sica por Linux:

$ sed 鈥渟/m煤sica/Linux/g鈥 texto

Eu adoro Linux. Acho que sem Linux eu n茫o seria nada, ficaria completamente triste, deprimido. Tamb茅m acredito que todo ser humano precisa de Linux, afinal n茫o importa o seu sabor, 茅 sempre bom!

Neste exemplo, a primeira parte do comando (/s) disse ao sed para procurar as ocorr锚ncias de m煤sica e transform谩-las para Linux. A 煤ltima letra (g) diz para substituir todas as ocorr锚ncias da linha.

Este 茅 um dos usos mais comuns do sed, apesar dele poder fazer muito mais.

Tags: , , , , , , , , , , ,

Deixe uma Resposta