o que grep -v -f / dev / null espera fazer exatamente?

4

Teoria: grep -f somefile ou grep --file=somefile encontrará todas as linhas que correspondem a um dos padrões listados em somefile . Se somefile estiver vazio, nada será igual. Com grep -v você lista as linhas que não correspondem .

Resultado: grep -f /dev/null não corresponde a nada e grep -v -f /dev/null corresponde a tudo.

Experiência: experimente agora com

% echo blank | grep -f /dev/null
% echo bingo | grep -v -f /dev/null
bingo

Resultados: Na verdade, recebo bingo (e somente isso) em uma máquina que possui

unix1% grep --version
grep (GNU grep) 2.20

Mas não obtenho bingo !?!? em outra máquina, desta vez com

unix2% grep --version
grep (BSD grep) 2.5.1-FreeBSD
unix2% uname -rs
Darwin 14.0.0

Pergunta: existe alguma margem de manobra na especificação de grep ? Algum jurista que eu perdi? Ou é grep (BSD grep) 2.5.1-FreeBSD buggy? O certo é que passei duas horas descobrindo o que deu errado ao portar meus scripts do unix1 para o unix2 ...

    
por phs 04.11.2014 / 14:35

1 resposta

1

Da página man do GNU grep:

-f FILE, --file=FILE
       Obtain  patterns  from  FILE,  one  per  line.   The  empty file
       contains zero patterns, and therefore matches nothing.   (-f  is
       specified by POSIX.)
-v, --invert-match
       Invert the sense of matching, to select non-matching lines.  (-v
       is specified by POSIX.)

então grep -f /dev/null irá combinar nada e grep -v -f /dev/null irá inverter isso e combinar tudo .

Eu tenho acesso a toda uma pletora de sistemas FreeBSD, mas todos deles têm o GNU grep instalado porque é muito melhor (tanto para velocidade e recursos, embora pareça que BSD grep está alcançando ). Ainda existem diferenças, por ex. em limites de palavras .

Eu suspeito que este seja um bug do BSD grep, embora talvez a especificação seja ambígua. Uma nota do link "catching up": BSD grep é basicamente um esforço para obter um clone do GNU grep mais permissivamente licenciado, o que significa que ele sempre estará "atrasado" em pelo menos alguma coisa.

Se possível, eu recomendo instalar o GNU grep nesses sistemas usando o BSD grep.

Se você está apenas tentando tornar seu código mais portável, suponho que eu continuaria perguntando por que você está ganhando por ~ nada. O que você está realmente tentando alcançar? Talvez seja melhor focar.

    
por 13.01.2015 / 23:32

Tags