Tente alterar a ordem dos arquivos:
grep -v -f ex2.txt ex1.txt
> d
Eu tenho 2 arquivos e quero encontrar a diferença e produzir apenas o que não está dentro do ex2
Se usar grep -Ff ex2.txt ex1.txt
, ele me mostrará a b c d
, se eu usar o mesmo comando com -v
, não haverá saída. Por que o primeiro comando também gera d
?
Qual seria a maneira mais fácil de fazer isso? O grep é adequado para isso? Talvez diff talvez um script que iria ler cada linha e saída se está lá ou não?
cat ex1.txt
a
b
c
d
cat ex2.txt
a
b
c
Editar --- minha saída aparece assim:
cat ex2.txt
a
b
c
cat ex1.txt
a
b
c
d
grep -vf ex2.txt ex1.txt
grep -f ex2.txt ex1.txt
a
b
c
d
Tente alterar a ordem dos arquivos:
grep -v -f ex2.txt ex1.txt
> d
Não é possível reproduzir seu erro:
cat ex2.txt
a
b
c
cat ex1.txt
a
b
c
d
grep -vf ex2.txt ex1.txt
d
grep -f ex2.txt ex1.txt
a
b
c
grep -Ff ex2.txt ex1.txt
a
b
c
grep -vFf ex2.txt ex1.txt
d
grep -V
grep (GNU grep) 2.20
lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 8.5 (jessie)
Release: 8.5
Codename: jessie
Editar (no OS X com o BSD grep):
cat ex2.txt
a
b
c
cat ex1.txt
a
b
c
d
grep -f ex2.txt ex1.txt
a
b
c
grep -vf ex2.txt ex1.txt
d
grep -Ff ex2.txt ex1.txt
a
b
c
grep -v -Ff ex2.txt ex1.txt
d
grep -V
grep (BSD grep) 2.5.1-FreeBSD
grep
não é realmente a ferramenta certa para o trabalho aqui, mas uma rápida olhada no grep manpage
deve ajudar (note que grep
irá variar semi-wildly entre distribuições, já que alguns podem usar o GNU por padrão e outros podem usar outra coisa).
Então, você pode imaginar que algo como grep -Fvf ex2.txt ex1.txt
funcionaria. No entanto, esta não é uma boa solução , pois requer que você já saiba algo sobre os arquivos antes de iniciar. Existem ferramentas melhores (como variantes de diff
) para fornecer diferenças mais específicas e mais precisas entre arquivos e / ou diretórios.
Editar: seqüências de caracteres fixas, não seqüências de caracteres de incêndio (auto-corrupt ser condenado)