2013-05-19 26 views
8

input.txt:Sử dụng sed để xóa hàng loạt các dòng ngoại trừ mô hình cuối

blah1 
blah2 
start_pattern 
blah3 
blah4 
blah5 
end_pattern 
blah6 
blah7 

Tôi muốn input.txt để trở thành:

blah1 
blah2 
end_pattern 
blah6 
blah7 

tôi đã cố gắng điều sau đây, nhưng nó đã không làm việc.

sed -i "/start_pattern/, /end_pattern/{$!d}" input.txt 
+0

Xin lỗi về điều đó. Cảm ơn bạn đã sửa định dạng của tôi. – Springray

+1

Không có vấn đề :) chào mừng bạn trên SO. –

+1

Trong câu hỏi này http://stackoverflow.com/q/8164604/356440, họ đang xử lý việc chỉnh sửa và xóa nhiều dòng bằng cách sử dụng 'sed', có thể nó có thể cung cấp cho bạn một số đầu mối/bản nhạc. –

Trả lời

5

This question giao dịch với vấn đề của bạn:

$ sed '/start_pattern/,/end_pattern/{/end_pattern/!d}' foo.txt 
blah1 
blah2 
end_pattern 
blah6 
blah7 
+0

Làm việc một cách hoàn hảo, cảm ơn. – Springray

5

sed là một công cụ tuyệt vời cho sự thay thế đơn giản trên một dòng đơn. Đối với bất kỳ thao tác văn bản khác chỉ cần sử dụng awk cho một, đơn giản hơn giải pháp rõ ràng hơn, dễ dàng hơn có thể mở rộng:

$ awk '/start_pattern/{f=1} /end_pattern/{f=0} !f;' file 
blah1 
blah2 
end_pattern 
blah6 
blah7 

Xem thêm:

$ awk '/start_pattern/{f=1} !f; /end_pattern/{f=0}' file 
blah1 
blah2 
blah6 
blah7 

$ awk '!f; /start_pattern/{f=1} /end_pattern/{f=0}' file 
blah1 
blah2 
start_pattern 
blah6 
blah7 

$ awk '/start_pattern/{f=1} /end_pattern/{f=0} f;' file 
start_pattern 
blah3 
blah4 
blah5 

$ awk '/start_pattern/{f=1} f; /end_pattern/{f=0}' file 
start_pattern 
blah3 
blah4 
blah5 
end_pattern 

$ awk 'f; /start_pattern/{f=1} /end_pattern/{f=0}' file 
blah3 
blah4 
blah5 
end_pattern 
+1

Đồng ý, đó là đẹp hơn! –

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