2012-05-15 56 views
7

Hoàn toàn học tập, nhưng nó làm tôi bực mình.Xóa các từ trùng lặp trong một dòng với sed

Tôi muốn sửa văn bản này:

there there are are multiple lexical errors in this line line 

sử dụng sed. Tôi đã có điều này đến nay:

sed 's/\([a-z][a-z]*[ ,\n][ ,\n]*\)\1/\1/g' < file.text 

Nó sửa mọi thứ ngoại trừ các từ được tăng gấp đôi cuối cùng!

there are multiple lexical errors in this line line 

Guru có thể giải thích lý do tại sao không giải quyết các từ ở cuối?

+0

N.B. RE - '[, \ n]' sed sử dụng '\ n' làm dấu tách dòng. Vì vậy, trừ khi bạn chèn '\ n' vào không gian mẫu, bạn sẽ không bao giờ gặp phải chúng sau khi đọc một dòng vào không gian mẫu. – potong

Trả lời

10

Điều này là do trong trường hợp cuối cùng (line) bộ nhớ regex 1 của bạn sẽ có line (dòng tiếp theo là dấu cách) trong đó và bạn đang tìm kiếm sự lặp lại của nó. Vì không có không gian sau khi line kết quả cuối cùng không thành công.

Để khắc phục điều này, hãy thêm dấu cách sau từ kết thúc line.

Hoặc bạn có thể thay đổi regex để:

sed -e 's/\b\([a-z]\+\)[ ,\n]\1/\1/g' 

See it

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