2012-08-27 3 views
5

Ich möchte die diff zwischen einem Absatz in der Mitte einer Datei und einer Datei mit einem einzelnen Absatz sehen.Pipe sed zu diff

Der Absatz befindet sich in der Zeile 60 der Datei foo, und die Datei bar enthält nur diesen Absatz mit möglichen geringfügigen Unterschieden.

Ich kann diesen Absatz mit sed soly extrahieren: sed -n 60,60p foo. Wie kann ich das in diff verwenden?

Die folgende nicht Arbeit:

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

ich tun kann:

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

Gibt es eine Lösung, die nicht mir erfordert irgendwo speichern vorübergehend ein Rohr mit?

Antwort

9

Wenn Sie ein ‚-‘ als Dateiargument wird diff von stdin lesen:

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

Und nicht nur 'diff'; Der Pseudodateiname '-' bedeutet Standardeingabe in vielen Kontexten, einschließlich, aber nicht beschränkt auf die GNU' coreutils', Perl und (oft) Python. – tripleee

7

Sie Prozess Substitution verwenden:

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

Dies kann auch die Ausgabe vergleichen verwendet werden aus zwei Prozessen:

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

das ist ziemlich nützlich zu wissen, – 2cupsOfTech

+0

scheint nicht in einer Bash-Datei tho arbeiten? –

+0

@thepickle: Es tut hier – Thor