2012-03-02 35 views
48

Tôi mới đến sed và tôi có câu hỏi sau. Trong ví dụ này:dòng xoá an toàn không chứa chuỗi cụ thể

some text here 
blah blah 123 
another new line 
some other text as well 
another line 

Tôi muốn xóa tất cả các dòng trừ có chứa một trong hai chuỗi 'text' hoặc chuỗi 'blah', vì vậy tập tin đầu ra của tôi trông như thế này:

some text here 
blah blah 123 
some other text as well 

Bất kỳ gợi ý làm thế nào điều này có thể được thực hiện bằng cách sử dụng sed?

+3

Phải câu trả lời sử dụng sed? grep sẽ làm điều này rất dễ dàng. – Tim

Trả lời

11

Bạn chỉ muốn in những dòng khớp với 'văn bản' hoặc 'blah' (hoặc cả hai), trong đó sự khác biệt giữa 'và' và 'hoặc' khá quan trọng.

sed -n -e '/text/{p;n;}' -e '/blah/{p;n;}' your_data_file 

-n có nghĩa là không in theo mặc định. Mẫu đầu tiên tìm kiếm 'văn bản', in nó nếu phù hợp và bỏ qua dòng tiếp theo; mẫu thứ hai cũng tương tự cho 'blah'. Nếu 'n' không có ở đó thì một dòng có chứa 'text and blah' sẽ được in hai lần. Mặc dù tôi có thể sử dụng chỉ -e '/blah/p', đối xứng tốt hơn, đặc biệt nếu bạn cần mở rộng danh sách các từ phù hợp.

Nếu phiên bản của sed hỗ trợ biểu thức thông thường kéo dài (ví dụ, GNU sed làm, với -r), sau đó bạn có thể đơn giản hóa đó để:

sed -r -n -e '/text|blah/p' your_data_file 
+3

Nếu sed không hỗ trợ '-r' nó có thể sẽ không hỗ trợ' {} '. Điều này sẽ làm việc với seds cũ hơn: 'sed '/ text \ | blah /! D' file' –

+0

Các' {...} 'nhóm lệnh là trong phiên bản 7 UNIX phiên bản của' sed'; Tôi không thể nghĩ làm thế nào bạn sẽ đi qua một phiên bản mà không được bổ sung. –

79

Điều này có thể làm việc cho bạn:

sed '/text\|blah/!d' file 
some text here 
blah blah 123 
some other text as well 
+0

Cảm ơn, điều đó hoạt động. – user1246172

+1

Làm thế nào tôi có thể xác định rằng văn bản hoặc blah chỉ có thể xuất hiện trong cột cuối cùng? – discipulus

+2

@lovedynasty Nếu bạn có ý nghĩa * ở cuối dòng *, bạn nên sử dụng '$': ''/ text $ \ | blah $ /! D'' – Melebius

5

Bạn chỉ cần thực hiện điều đó thông qua awk,

$ awk '/blah|text/' file 
some text here 
blah blah 123 
some other text as well 
Các vấn đề liên quan