2012-08-27 20 views
5

Tôi muốn xem diff giữa một đoạn ở giữa tệp và tệp có chứa một đoạn văn.Ống sed khác

Đoạn nằm trên dòng 60 của tệp foo và tệp bar chỉ chứa đoạn đó với các khác biệt nhỏ có thể có.

Tôi có thể trích xuất đoạn đó bằng cách sử dụng sed như vậy: sed -n 60,60p foo. Làm thế nào tôi có thể sử dụng điều này trong diff?

Sau đây không công việc:

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

tôi có thể làm:

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

Có một giải pháp mà không yêu cầu tôi để lưu trữ ở đâu đó tạm thời sử dụng một ống?

Trả lời

9

Nếu bạn sử dụng một '-' như là đối số tập tin, diff sẽ đọc từ stdin:

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

Và không chỉ 'diff'; pseudo-filename '-' biểu thị đầu vào tiêu chuẩn trong rất nhiều ngữ cảnh, bao gồm, nhưng không giới hạn, GNU' coreutils', Perl, và (thường) Python. – tripleee

7

Bạn có thể sử dụng thay thế tiến trình:

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

này cũng có thể được sử dụng để so sánh sản lượng từ hai quy trình:

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

điều này khá hữu ích khi biết – 2cupsOfTech

+0

dường như không hoạt động trong một tệp bash tho? –

+0

@thepickle: Nó có ở đây – Thor