shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] grep -f


From: Julio C. Neves
Subject: Re: [shell-script] grep -f
Date: Tue, 22 May 2012 15:43:57 -0300

Fala Rodrigo,
então vamos lá (eu já deveria ter dado esta explicação junto com a
resposta). A linha que postei foi a seguinte:

$ grep -vf <(sed 's/^/^/;s/$/$/;s/\./\\\./' zimbralista) zimbratodos

1 - Como a opção -f do grep pede um arquivo, usei a construção <(...), que
que gera um named pipe (portanto um arquivo) temporário (/dev/fd/63) com o
resultado da instrução (ou instruções) no seu interior;
2 - O sed permite que se use diversos cmds, desde que separados por
ponto-e-vírgula (ou <ENTER>) e dessa forma, no duro, executei 3 sed.
2.1 - s/^/^/ - Não se esqueça que RegExp *casa com texto*, assim sendo o 1º
cincunflexo é RegExp que significa início e o 2º é texto. Assim sendo estou
colocando um circunflexo no início de cada linha;
2.2 - s/$/$/ - Da mesma forma estou colocando um cifrão no final de cada
linha;
2.3 - s/\./\\\/ - Estou colocando uma contrabarra antes de um eventual
ponto, para tirar seus super poderes de curinga. Aí dei uma bobeada,
esqueci de tornar a substituição global, para o caso de algum nome ter mais
de um ponto. O correto seria: s/\./\\\/g

Espero que agora esteja bem detalhado.

OBS: se vc estiver no RJ e quiser fazer um curso de 40 horas em turma
reduzida e bem barato, me mande um e-mail em pvt, pois estou montando
turmas de somente 5 pessoas por aqui.

Abcs,
Julio

*
*



Em 22 de maio de 2012 11:15, M. Rodrigo Monteiro <
address@hidden> escreveu:

> **
>
>
> 2012/5/20 Julio C. Neves <address@hidden>:
> > Fala Rodrigo,
> > acho que sei o que está acontecendo. O arquivo definido pela opção -f é
> um
> > arquivo de expressões regulares e o ponto (.) é uma expressão regular que
> > casa qq caractere. Por outro lado "nome" tb casa com "nome maior" ou com
> >  "renomear".
> >
> > Resumindo, o correto seria protegermos o ponto e colocarmos início (^) e
> > fim ($) no arquivo de pesquisa. Para fazer isso, creio que a melhor forma
> > seria:
> >
> > $ grep -vf <(sed 's/^/^/;s/$/$/;s/\./\\\./' zimbralista) zimbratodos
> >
>
> Grande Julio.
>
> É exatamente isso. Depois que enviei o e-mail tinha suspeitado desse
> problema, fiz até um teste colocando nome.sobrenome no arquivo de
> testes mas não ocorreu problema. Deveria ter ocorrido, mas... :)
> Enfim, obrigado pela ajuda.
>
> ps: seria pedir demais para explicar o sed?
>
> M. Rodrigo Monteiro
> "Free as in Freedom, not free as in free beer"
> "As we are liberated from our own fear, our presence automatically
> liberates others"
> Linux User # 403730
>  
>


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]