2013-06-25 27 views
8

Tôi có một tập tin có dạng như sau:Xóa đến cuối dòng sau một trận đấu, giữ dòng không phù hợp

interesting text-MIB blah blah blah 
VERY INTERESTING TEXT 
interesting text-MIB blah blah blah 

Trong mỗi dòng chứa "-MIB" chuỗi, tôi muốn xóa văn bản theo chuỗi này, cho đến cuối dòng.

Lệnh sau dường như làm việc như mong đợi:

sed -i -n -e 's/-MIB.*$/-MIB/p' ./myfile 

Vấn đề của tôi là nó cũng xóa các dòng mà mô hình của tôi không được tìm thấy. Ở đây, dòng "VERY INTERESTING TEXT" sẽ bị xóa. Tôi không thực sự quen thuộc với sed. Tôi đang làm gì sai? Là sed thích hợp cho loại điều trị?

Trả lời

3

Tôi đã chỉnh sửa số sed của bạn. Hãy thử điều này,

sed -i.bak 's/-MIB.*$/-MIB/g' ./myfile 

Ở đây,

-i - sẽ thực hiện những thay đổi trong file gốc và có bản sao lưu của tập tin gốc trong phần mở rộng bak

1

sed-n tùy chọn ngăn chặn việc in ấn mặc định đó là sau đó được bật nếu bạn đặt tùy chọn p sau tuyên bố sed của mình.

Trong ví dụ trên, những gì bạn đang nói sed là để ngăn chặn việc in tất cả các dòng và sau đó chỉ in những dòng mà thay thế đã được thực hiện thành công. Kết quả là dòng mà không có thay thế được thực hiện là không bao giờ được in.

Bạn cần loại bỏ các -n tùy chọn và p từ lệnh của bạn:

sed -ie 's/-MIB.*$/-MIB/' ./myfile 
+0

Cảm ơn đã giải thích thêm. –

Các vấn đề liên quan