Khác biệt, chỉ hiển thị dòng sửa đổi từ tệp bên phải


24

Tôi có tập tin abtôi muốn các dòng đầu ra bđã thay đổi vì nó được sao chép từ đó a. Chỉ là các dòng sửa đổi, không có bối cảnh xung quanh, không có dấu hiệu khác biệt.

Làm thế nào tôi có thể làm điều đó bằng cách sử dụng kịch bản shell? (Không có Python / Perl / PHP / ...)

Sed và awk là giải pháp chấp nhận được.

Hiện tại, những gì tôi đang làm là khác biệt với --suppress-common-lines và sed sử dụng phản hồi regex để chỉ lấy phần đúng sau khoảng trắng. Phải có cách tốt hơn?

Sử dụng perl (bị cấm), tôi Xỏ làm một việc như thế này:

diff -y --suppress-common-lines -W $COLUMNS Eclipse_Preferences_Export_*.epf | perl -pe 's/.*\t|\t(.*)$/\1/g'

Câu trả lời:


34

Với gói GNU diffutils , diffđiều này sẽ chỉ xuất ra các dòng từ tệp b đã được sửa đổi hoặc mới được chèn:

diff --unchanged-line-format= --old-line-format= --new-line-format='%L' a b

4
Tuyệt vời. Xấu hổ thông tin bị chôn vùi trong Texinfo và không có gợi ý nào được cung cấp trong trang người đàn ông tôi đang đọc ..
Robottinosino

6

Bạn phải thêm một tùy chọn nữa:

grep -vf file1 file2

Mặc dù điều này không yêu cầu sắp xếp các dòng, tôi nghĩ grep sử dụng nhiều bộ nhớ hơn và sẽ bị sập đối với các tệp lớn.
Sridhar Sarnobat

không hoạt động nếu các dòng được nhân đôi
Jayen

4
awk 'FNR==NR{old[$0];next};!($0 in old)' old.txt new.txt
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.