2012-08-27 13 views
5

Quiero ver el diff entre un párrafo en el medio de un archivo y un archivo que contiene un solo párrafo.Pipe sed to diff

El párrafo está en la línea 60 del archivo foo, y el archivo bar contiene solo ese párrafo con posibles diferencias menores.

Puedo extraer ese párrafo usando sed así: sed -n 60,60p foo. ¿Cómo puedo usar esto en diff?

La siguiente No trabajo:

sed -n 60,60p foo | diff bar # diff: missing operand after `foo` 
diff bar `sed -n 60,60p foo` # diff: extra operand `in` 

que puedo hacer:

sed -n 60,60p foo >> tempfile; diff bar tempfile 

¿Hay una solución que no me requiere para almacenar temporalmente en algún lugar usando un tubo?

Respuesta

9

Si utiliza un '-' como argumento de archivo, diff se lee de la entrada estándar:

sed -n 60,60p foo | diff bar - 
+3

Y no solo 'diff'; el pseudo-nombre de archivo '-' significa entrada estándar en muchos contextos, incluidos, entre otros, GNU' coreutils', Perl y (a menudo) Python. – tripleee

7

Se podría utilizar el proceso de sustitución:

diff bar <(sed -n 60,60p foo) 

Esto también puede ser utilizado para comparar la salida de dos procesos:

diff <(sed -n 60,60p bar) <(sed -n 60,60p foo) 
+0

esto es bastante útil para saber – 2cupsOfTech

+0

no parece funcionar en un archivo bash pero? –

+0

@thepickle: Lo hace aquí – Thor