Utilice diff para encontrar la diferencia en la salida de dos comandos grep

Utilice diff para encontrar la diferencia en la salida de dos comandos grep

¿Es posible diffla salida de dos grepcomandos?

Actualmente estoy buscando archivos, usando diferentes patrones de exclusión y el resultado es bastante largo, así que quería ver si mi nuevo patrón funcionaba o si el resultado sigue siendo el mismo.

¿Es posible de alguna manera canalizar dos grepcomandos en diffo algo así?

grep --exclude=*{.dll, pdb} --ril "dql"
grep  --ril "dql"

Respuesta1

Usando sobre la marcha:

diff <(grep pattern file) <(grep another_pattern file)

Sustitución de proceso: <(command)o >(command)se reemplaza por una entrada FIFO o /dev/fd/*. Básicamente una abreviatura para configurar una canalización con nombre. Verhttp://mywiki.wooledge.org/ProcessSubstitution.
Ejemplo:diff -u <(sort file1) <(sort file2)

Entonces :

diff <(grep --exclude=*{.dll, pdb} --ril "dql") <(grep  --ril "dql")

Respuesta2

en bashel usosustitución de procesos:

$ echo a > FILE
$ echo b > FILE1
$ diff <(grep a *) <(grep b *)
1c1
< FILE:a
---
> FILE1:b

Como se describe en man bash:

   Process Substitution
   Process substitution is supported on systems that support named
   pipes (FIFOs) or the /dev/fd method of naming open files.  It
   takes the form of <(list) or >(list).  The process list is run
   with its input or output connected to a FIFO or some file in
   /dev/fd.  The name of this file is passed as an argument to the
   current command as the result of the expansion.  If the >(list)
   form is used, writing to the file will provide input for list.
   If the <(list) form is used, the file passed as an argument
   should be read to obtain the output of list.

   When available, process substitution is performed
   simultaneously with parameter and variable expansion,
   command substitution, and arithmetic expansion.

información relacionada