2009-04-11 3 views
9

Tôi đang đọc từ một dòng có khoảng 500 ký tự. Làm thế nào tôi có thể có được sed, thay vì thay thế chuỗi đó với một cái gì đó, thay thế phần còn lại của dòng với một cái gì đó? Tóm lại, tôi muốn xóa tất cả văn bản xung quanh một chuỗi được chỉ định. Việc xóa các cột bằng awk sẽ không hoạt động, bởi vì có một số lượng ký tự không xác định trước và sau chuỗi phù hợp. Bất kỳ ý tưởng nào?Làm thế nào để đảo ngược đầu ra sed?

Trả lời

10

Hãy thử sử dụng lại tài liệu tham khảo:

sed 's/.*\(searchstring\).*/___\1___/' 

Các .* 's xung quanh chuỗi tìm kiếm sẽ phù hợp với tất cả mọi thứ nhưng chuỗi, và các dấu ngoặc nói sed phải nhớ những gì nó xuất hiện. Bạn có thể tham khảo chuỗi phù hợp đầu tiên với \1.

Dưới đây là một ví dụ (thay thế tất cả mọi thứ nhưng 'bar baz'):

$ echo "foo bar baz qux" | sed 's/.*\(bar baz\).*/___\1___/' 
___bar baz___ 

Bạn có thể thay thế 'bar baz' với bất cứ mẫu bạn thích ở trên; Tôi chỉ sử dụng một chuỗi cơ bản cho sự đơn giản.