Tôi cần đánh dấu mọi từ trùng lặp trong văn bản có ký hiệu *
.
Ví dụThực hiện lệnh trên cùng một dòng nhiều lần với sed
lol foo lol bar foo bar
nên
lol foo *lol* bar *foo* *bar*
Tôi đã thử với các lệnh sau:
echo "lol foo lol bar foo bar" | sed -r -e 's/(\b[a-zA-Z]+\b)([^*]+)(\1)/\1\2*\3*/'
Nó mang lại cho tôi:
lol foo *lol* bar foo bar
Sau đó, tôi đã thêm 012.cờ:
lol foo *lol* bar foo *bar*
Nhưng foo
không được tô sáng.
Tôi biết điều đó xảy ra vì sed
doesn't look behind if the match was found.
Tôi có thể xử lý chỉ với sed
không?
Chỉ có 'sed' bạn nói ... Điều này sẽ yêu cầu một số thuật sĩ' sed' tôi tin. – rid
Tại sao không sử dụng 'awk'? Nó có thể giải quyết vấn đề của bạn. – Jotne
@ Jotne thẳng thắn nói rằng tôi đã có nhiệm vụ để làm điều đó với chỉ sed. Nhưng nói chung tôi đã quan tâm nếu 'sed' có thể thực hiện cùng một lệnh trên một dòng nhiều lần – Dany