2013-07-26 27 views
6

Tôi có một tập tin mà trông giống như sau:Làm thế nào để xóa các dòng phù hợp với một mô hình và các dòng sau khi nó với sed?

good text 
good text 
FLAG bad text 
bad text 
good text 
good text 
good test 
bad Text FLAG bad text 
bad text 
good text 

tôi cần phải xoá bất kỳ dòng có chứa "CỜ" tôi luôn cần phải xoá một dòng ngay sau khi "CỜ" dòng quá.

Đường "FLAG" đến mức bất thường mà tôi không thể dựa vào bất kỳ loại chiến lược số dòng nào.

Bất kỳ ai biết cách làm điều này với sed?

Trả lời

8

Sử dụng một phần mở rộng của phiên bản GNU của :

sed -e '/FLAG/,+1 d' infile 

Nó mang lại:

good text 
good text 
good text 
good text 
good test 
good text 
+0

Perfect. Tôi đã thử một cái gì đó như thế, nhưng không thể đoán cú pháp chính xác. Cảm ơn! –

9

này hoạt động, và không phụ thuộc vào bất kỳ phần mở rộng:

sed '/FLAG/{N 
d 
}' infile 

N đọc dòng tiếp theo vào không gian mẫu, sau đó d xóa không gian mẫu.

+1

Nhiều nghĩa vụ. Ước gì tôi có thể chấp nhận hai câu trả lời ở đây. Đã cho bạn một upvote. –

2

Dưới đây là một cách với awk:

awk '/FLAG/{f=1;next}f{f=0;next}1' file 

hoặc

awk '/FLAG/{getline;next}1' file 
Các vấn đề liên quan