segunda-feira, 17 de agosto de 2009

Editor de texto sed

sed é um "Stream EDitor" ou editor de fluxo, bastante leve para linha de comando. Um editor de fluxo é um programa usado para executar transformações básicas em textos recebidos de uma entrada em fluxo, pode ser vindo de um arquivo ou da entrada padrão.

O sed trabalha com somente uma passagem sobre a entrada, tornando-o assim mais eficiente. Mas é a habilidade de filtragem de texto em um redirecionamento da saída para a entrada padrão, canalização, que o distingue dos outros tipos de editores.

A característica principal do sed é poder editar arquivos automaticamente. É um editor de textos não interativo, ele pode editar automaticamente, sem interação do usuário, vários arquivos seguindo um conjunto de regras especificadas. É como uma edição em "lote".

O sed é um editor de fluxo que está incluído em quase todos os sabores de UNIX, incluindo o Linux. Entretanto as distribuições do Linux contém o GNU sed, uma versão melhorada com muitas extensões úteis que economizam tempo ao padrão sed POSIX e também não sofre as muitas limitações que versões anteriores e proprietárias do sed tinham.

O sed trabalha executando qualquer número de operações de edição especificadas pelo usuário nos dados de entrada. O sed é baseado em linhas, assim os comandos são executados em cada linha, em ordem. E o sed escreve o resultado na saída padrão, ele não modifica nenhum arquivo de entrada.

Abaixo apresento alguns exemplos de uso do sed. Dentre eles alguns exemplos com o uso do sed combinado com outros programas para que tenha algo mais prático e assim entender melhor a utilidade do sed:

Substitui em cada linha de arquivo.txt as palavras "assim" para "assado":
sed 's/assim/assado/g' arquivo.txt

Substitui somente nas linhas que encontrar a string as palavras "assim" para "assado":
sed '/string/s/assim/assado/g'

Remove os 34 primeiros caracteres a partir do início de cada linha:
sed 's/^.\{34\}//' hash.md5 > arquivo.txt

Remove desde o início de cada linha até a última / encontrada
sed 's/^.*\///' caminhos.txt > sonomes.txt

Renomeia todos os arquivos .doc trocando _ e - por espaços:
for i in `ls *.doc`; do mv $i "`echo $i | sed 's/_/ /g; s/-/ /g'`"; done

Remove em arquivo.txt a linha 1 até a 28:
sed '1,28d' arquivo.txt > outro_arquivo.txt

Remove todas as linhas em branco:
sed '/^$/d' arquivo_com_linhas_em_branco.txt | sort > arquivo_limpo.txt

Remove todas as linhas que contenham a string:
sed '/string/d' arquivo.txt

Renomeia todos os arquivos de letras maiúsculas para minúsculas:
for i in `ls *.*`; do mv $i `echo $i | sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZÀÁÂÃÄÅÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÇÑ/abcdefghijklmnopqrstuvwxyzàáâãäåèéêëìíîïòóôõöùúûüçñ/'`; done

Remove todas as tags HTML:
sed 's/<[^>]*>//g' arquivo.html > arquivo.txt

Adiciona um texto no início de cada linha:
sed 's/^/texto incluido/' arquivo.txt

Adiciona um texto no final de cada linha:
sed 's/$/texto incluido/' arquivo.txt

Nenhum comentário:

Postar um comentário