La grep inversa que utiliza un archivo de patrón no muestra no coincidencias

La grep inversa que utiliza un archivo de patrón no muestra no coincidencias

Tengo dos archivos casi idénticos,"foo" y "barra".

Cada archivo tiene miles de líneas, un número por línea.

Si yo sorty luego diffambos archivos, este es el resultado:

$ diff foo bar
5984a5985,5986
> 15676
> 15677
7703,7706d7704
< 17486
< 17487
< 17488
< 17489

Sin embargo, si compro grep -Fvfambos archivos, obtengo cero "no coincidencias" en ambas direcciones:

$ grep -Fvf foo bar
$ grep -Fvf bar foo
$

¿Porqué es eso? ¿No debería obtener resultados similares a las diferencias? Esperaría que el primer comando me devolviera la "primera mitad" de los valores en diff, y que el segundo comando grep me devolviera el resto.

¿Por qué no obtengo los resultados esperados?

Respuesta1

Porque , diffa diferencia degrep -FvfEl orden en que aparecen las líneas importa.. Además, dado que la -xopción no estaba incluida en el comando grep, las líneas con simplescoincidencias parcialesquedan excluidos de la salida.

Ejemplo reproducible

Considere estos dos archivos:

$ cat foo
156
174
15676
17486
17487
$ cat bar
15677
15678
156
174
15676

El diffcomando muestra que son diferentes, mientras que los grepcomandos no producen ningún resultado:

$ diff foo bar
0a1,2
> 15677
> 15678
4,5d5
< 17486
< 17487
$ grep -Fvf foo bar; grep -Fvf bar foo

Si tuviéramos que agregar -xpara requerir coincidencias de línea completa, entonces grep produce:

$ grep -Fvxf foo bar
15677
15678
$ grep -Fvxf bar foo
17486
17487

Sugerencia adicional

Comoabligiendosugiere en los comentarios, diff -uproduce más contexto que puede hacer que el resultado sea más fácil de entender.

información relacionada