Điều này trả lời câu hỏi thực tế của bạn, nhưng không phải là ý định của bạn.
Bạn đã hỏi về việc thay thế lần xuất hiện thứ n của một từ (nhưng dường như có nghĩa là "trong một dòng"). Đây là câu trả lời cho câu hỏi như được hỏi, trong trường hợp ai đó tìm thấy câu hỏi như tôi đã làm =)
Đối với các tác vụ lạ (như thay thế mọi lần xuất hiện lần thứ 12 của "chó" bằng "con vẹt"), tôi thích sử dụng các bản ghi đệ quy .
Đầu trống ghi trong @q
qqq
Bây giờ bắt đầu việc ghi mới trong q
qq
Tiếp theo, tay làm điều bạn muốn làm (sử dụng ví dụ trên, thay thế Lần xuất hiện thứ 12 của "con chó" với "con vẹt"):
/dog
nnnnnnnnnnn
xóa "con chó" và nhập vào số
diwi
loại vẹt
parrot
Bây giờ chơi hiện đang trống "@q" bạn ghi
@q
mà không làm gì.
Cuối cùng, dừng ghi:
q
Bây giờ ghi hình của bạn trong @q tự gọi mình ở cuối. Nhưng bởi vì nó gọi ghi âm theo tên, nó sẽ không còn trống nữa. Vì vậy, hãy gọi bản ghi:
@q
Nó sẽ phát lại bản ghi, sau đó ở cuối, làm bước cuối cùng, tự phát lại. Nó sẽ lặp lại điều này cho đến khi kết thúc tập tin.
TLDR;
qq
q
/dog
nnnnnnnnnnndiwiparrot<esc>
@q
q
@q
Nguồn
2017-07-26 06:05:30
Dường như có trong sed, nhưng không phải là vim 's ///': http://vim.1045645.n5.nabble.com/replace-nth-occurrence-on-each-line-like- sed-td1169460.html – keflavich