Bom...
pensando um pouco mais bolei as seguinte solucoes
via GREP (nao traz todas as ocorrencias... por que posso ter outro the
a menos de 20 caracteres)
tr -d '\n' < electricity.txt | grep -oE '.{20}the.{20}'
via AWK (ficou bem bacana, fiz uma bruxaria...)
tr -d '\n' < electricity.txt | awk '{
for(;;){ # laço infinito
p=index(substr($0,add+1),"the");
if(p==0) break; add += p;
printf "%43s\n",substr($0,add-20,43);
}
}'
a ideia do awk é: eu procuro a posição de um padrao. quando encontro,
eu vou imprimir 20 caracteres antes e 23 depois da posição desse
padrão. ai vou procurar novamente, mas adiante, por isso o meu index
recebe um substr, no primeiro ciclo, max será 0, então eu procuro em
toda a $0.
estou usando tr -d '\n' para ficar mais compacto o resultado, o visual
fica melhor IMHO.
acho q pode ser particularmente util este tipo ideia em arquivos de
log, onde posso ter varios tipos de mensagens de erro, em diversas
posições.
[]´s Tiago
On 2/7/07, Tiago Barcellos Peczenyj <[EMAIL PROTECTED]> wrote:
> Miranda, eu fiz assim:
>
> tr -d '\n' < electricity.txt | sed -n
> 's/.\{20\}the.\{20\}/\n&/g;/the/p' | cut -c1-43
>
> é claro que existem outras formas melhores ate, mas esta ficou bonita
> (mas não completa).
>
> tentei com awk usando substr mas ficou uma maçaroca
>
> On 2/7/07, Miranda <[EMAIL PROTECTED]> wrote:
> > Estava praticando tutorial de uma outra linguagem de programação
> > e deparei com esse exercício que achei bem interessante
> > e que levei a cabo usando essa linguagem.
> > Se alguém quiser usar shell-script para fazer será um exercício
> > interessante ,creio eu.
> > Dado um texto :
> > que você pode usar esse aqui , que é legal :
> > http://www.comp.leeds.ac.uk/Perl/Misc/electricity.txt
> > fazer um script que tenha como saida algo como aqui :
> >
> > discovered (this is the truth) that when he
> > t kinds of metal to the leg of a frog, an e
> > rrent developed and the frog's leg kicked,
> > longer attached to the frog, which was dea
> > normous advances in the field of amphibian
> > ch it hop back into the pond -- almost. Bu
> > ond -- almost. But the greatest Electrical
> > ectrical Pioneer of them all was Thomas Edi
> >
> > Que mostra parte das linhas em que aparece o padrao "the"
> > alinhado na coluna.
> >
> > seria interessante também para testar, que o padrao
> > seja passado como parametro para o programa.
> > Alguém tem um tempinho para perder(ganhar) ? :o)
> >
> > P.S.:
> > Se alguém quiser a página onde se encontra esse exercício
> > com dicas , mas da outra linguagem , só mandar um PVT.
> >
> >
> >
> >
> >
> > ---------------------------------------------------------------------
> > Esta lista não admite a abordagem de outras liguagens de programação, como
> > perl, C etc. Quem insistir em não seguir esta regra será moderado sem
> > prévio aviso.
> > ---------------------------------------------------------------------
> > Sair da lista: [EMAIL PROTECTED]
> > ---------------------------------------------------------------------
> > Esta lista é moderada de acordo com o previsto em
> > http://www.listas-discussao.cjb.net
> > ---------------------------------------------------------------------
> > Servidor Newsgroup da lista: news.gmane.org
> > Grupo: gmane.org.user-groups.programming.shell.brazil
> >
> >
> > Links do Yahoo! Grupos
> >
> >
> >
>
>
> --
> Tiago B Peczenyj
> Linux User #405772
>
> # cd /pub
> # more beer
>
--
Tiago B Peczenyj
Linux User #405772
# cd /pub
# more beer