2013-05-07 24 views
34

Tôi có 2 tệp nguồn, chúng là các phiên bản khác nhau của cùng một thứ. Tuy nhiên, một người đã trải qua một trình soạn thảo khác nhau đã thực hiện các thay đổi thụt lề, vì vậy tất cả các dòng đều hiển thị khác nhau về khác biệt.Làm cách nào để phân biệt 2 tệp trong khi bỏ qua không gian trắng hàng đầu

Có một lệnh khác hoặc bộ lọc tôi có thể sử dụng để phân biệt để đầu ra sẽ chỉ là các dòng khác nhau sau khi bỏ qua các dấu cách/tab hàng đầu?

Trả lời

46

diff có một số tùy chọn có thể hữu ích cho bạn:

-E, --ignore-tab-expansion 
      ignore changes due to tab expansion 

    -Z, --ignore-trailing-space 
      ignore white space at line end 

    -b, --ignore-space-change 
      ignore changes in the amount of white space 

    -w, --ignore-all-space 
      ignore all white space 

    -B, --ignore-blank-lines 
      ignore changes whose lines are all blank 

Vì vậy diff -w old new nên bỏ qua tất cả không gian và do đó báo cáo dòng chỉ khác nhau đáng kể.

+6

Cần lưu ý rằng '-w' loại bỏ tất cả khoảng trống từ các dòng trước khi so sánh, vì vậy' ab' và 'a b' được coi là giống nhau. Tôi thích '-b' vì nó bỏ qua khoảng trắng _changes_, có nghĩa là' ab' và 'ab' được coi là khác nhau nhưng' ab' và 'a' + _multiple spaces_ +' b' (xin lỗi, mini-Markdown sẽ không cho phép nhiều không gian trong mã!) được coi là giống nhau. –

+0

Làm cách nào để bỏ qua tất cả các dòng mới? – Goldname

+2

Tôi có thể nói 'diff' để bỏ qua các mở rộng chuỗi tương đương cho các số siêu việt như e và pi không? – geneorama

1

Nếu ai sử dụng các tab không đúng cách, bạn can fix that

expand bad_file 
0
diff -bB file[12] 
-b, --ignore-space-change 
     ignore changes in the amount of white space 
-B, --ignore-blank-lines 
     ignore changes whose lines are all blank 

Xin lưu ý rằng -w tùy chọn sẽ bỏ qua tất cả khoảng trắng trước khi diffing, do đó, một dòng như this i s a linethis is a line trong mỗi tệp sẽ so sánh với tên thisisaline và sẽ không báo cáo sự khác biệt.

Bên cạnh các -w lựa chọn vấn đề, thậm chí -b tùy chọn có vấn đề nhỏ và điều đó không bỏ qua khoảng trắng nếu đi vào khất thực của một dòng

Vì vậy, bạn nên sử dụng sed để loại bỏ những khoảng trắng xảy ra khi khởi động đầu tiên sau đó làm `diff -bB.

diff -bB <(sed 's/^[ \t]*//' file1) <(sed 's/^[ \t]*//' file2) 
Các vấn đề liên quan