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)