Nesta aula continuaremos nosso tutorial, desta vez falando
sobre o Sed. Vale lembrar que este tutorial dará uma breve
introdução ao Sed, ajudando os iniciantes a entender
como ele funciona. Portanto muitos comandos mais complexos
serão omitidos, já que seria necessário um livro
inteiro para ensinar tudo sobre o Sed. Mas não se
preocupem, ensinaremos o suficiente sobre ele para
utilização em shell script.
Resumo de RegExp
Vamos a um resumo sobre as expressões regulares,
explicadas na aula anterior e agora aplicadas ao Sed:
^ casa com o começo de linha
$ casa com o fim de linha
. casa com qualquer caracter simples
(apenas um)
(caracter)* casa com qualquer ocorrência, em qualquer
quantidade, de (caracter)
(caracter)? casa com zero ou uma ocorrência de
(caracter)
[abcdef] Casa com qualquer caracter dentro dos [ ]
(neste caso, a b c d e ou f), faixas de caracteres como [a-z]
são
permitidas.
[^abcdef] Casa com qualquer caracter NÃO
incluído em [] (neste caso, qualquer caracter que
não seja a b c d e ou f)
(caracter)\{m,n\} casa com m-n repetições de
(caracter)
(caracter)\{m,\} casa com m ou mais repetições de
(caracter)
(caracter)\{,n\} casa com n ou menos (também zero)
repetições de (caracter)
(caracter)\{n\} casa com exatamente n repetições
de (caracter)
\(expressão\) operador de grupo.
\n Backreference - casa com o
n-ésimo grupo
expressão1\|expressão2 Casa com expressão1 ou
expressão2. Funciona com o GNU sed, mas essa
característica pode não funcionar com outros Seds.
Caracteres Especiais
Os caracteres especiais no Sed são os mesmo do Grep,
com uma diferença: a barra normal / é um caracter
especial no sed. A razão disso ficará clara mais para
frente quando estudarmos os comandos do sed.
Como funciona: Uma breve
introdução
O Sed funciona assim: ele lê da entrada padrão,
uma linha de cada vez. Para cada linha, ele executa uma
série de comandos de edição e então a linha
é escrita na saída padrão. Um exemplo que mostra
como ele funciona: Nós usamos o comando "s", que significa
"substitute" (substituir) ou "search and replace" (procurar e
trocar). O formato é:
s/expressão-regular/texto-substituto/{flags}
Nós não vamos discutir todas as flags ainda. A
única que usamos abaixo é a "g", que significa
"substitua todas as ocorrências":
>cat file
Eu tenho três cachorros e dois gatos
>sed -e 's/cachorros/gatos/g' -e 's/gatos/elefantes/g' file
Eu tenho três elefantes e dois elefantes
OK, então o que aconteceu? Primeiro o sed leu a linha
do arquivo "file" e executou:
s/cachorros/gatos/g
que produziu o seguinte texto:
Eu tenho três gatos e dois gatos
e então o segundo comando foi executado na linha já
editada e resultou:
Eu tenho três elefantes e dois elefantes
Nós atualmente damos um nome para o texto (geralmente
uma linha) que o sed leu e está processando (editando):
ele chama-se "pattern space" (uma boa tradução seria
"área de edição").
O sed lê da entrada padrão e joga na sua área
de edição, executando nela uma seqüência de
comandos de edição e então ele escreve o
resultado na saída padrão.
Comandos de Substituição e
Deleção
Primeiro, as maneiras mais usuais do sed é a
seguinte:
>sed -e 'comando1' -e 'comando2' -e 'comando3' arquivo
>{comando shell} | sed -e 'comando1' -e 'comando2'
>sed -f sedscript.sed arquivo
>{comando shell} | sed -f sedscript.sed
Então, o sed pode ler do arquivo ou da entrada
padrão, e os comandos podem ser especificados em um
arquivo de script ou na linha de comando. Esse arquivo, chamado
sedscript.sed é um arquivo que contém todos os
comandos do sed, ao invés de serem especificados na linha
de comando. Esses sed's scripts são úteis quando
precisamos de um processamento de texto mais complexo e
refinado.
Note o seguinte: se os comandos são lidos de um arquivo
(sed script), espaços em branco podem ser fatais. Eles
podem fazer o script falhar sem explicação aparente.
Eu recomendo editar os arquivos de comandos do sed com um
editor como o VIM que pode mostrar o final da linha e você
pode ver se existem espaços em branco entre os comandos e
o fim da linha.