Tôi muốn tìm kiếm một chuỗi và tìm số lần xuất hiện trong một tệp bằng trình chỉnh sửa vi.
Tôi muốn tìm kiếm một chuỗi và tìm số lần xuất hiện trong một tệp bằng trình chỉnh sửa vi.
Câu trả lời:
:g/xxxx/d
Thao tác này sẽ xóa tất cả các dòng có mẫu và báo cáo số lượng đã xóa. Hoàn tác để lấy lại sau.
CÁCH là
:% s / pattern // gn
Bạn cần n
lá cờ. Để đếm từ, hãy sử dụng:
:%s/\i\+/&/gn
và một từ cụ thể:
:%s/the/&/gn
Xem count-items
phần tài liệu.
Nếu bạn chỉ cần nhập:
%s/pattern/pattern/g
thì dòng trạng thái sẽ cung cấp cho bạn số trận đấu trong vi.
(tương tự như Gustavo đã nói, nhưng bổ sung:)
Đối với bất kỳ tìm kiếm nào trước đây , bạn có thể thực hiện đơn giản:
:%s///gn
Một mẫu không cần thiết vì nó đã có trong thanh ghi tìm kiếm ( @/
).
"%" - thực hiện s/
trong toàn bộ tệp
"g" - tìm kiếm toàn cầu (với nhiều lần truy cập trong một dòng)
"n" - ngăn bất kỳ thay thế nào của s/
- không có gì bị xóa! không có gì phải được hoàn tác!
(xem: :help s_flag
để biết thêm thông tin)
(Bằng cách này, nó hoạt động hoàn hảo với " Tìm kiếm văn bản được chọn trực quan ", như được mô tả trong vim-wikia tip171 )
sử dụng
:% s / mẫu / \ 0 / g
khi chuỗi mẫu quá dài và bạn không muốn nhập lại tất cả.
Câu trả lời ngắn gọn :
:% s / string-to-be-search // gn
Để học tập :
Có 3 chế độ trong VI editor như bên dưới
:
bạn đang nhập từ chế độ này Command
sang Command-line
chế độ khác. Bây giờ, bất cứ điều gì bạn viết sau đó :
đều có trên CLI (Giao diện dòng lệnh)%s
chỉ định tất cả các dòng. Chỉ định phạm vi làm %
phương tiện thay thế trong toàn bộ tệp. Cú pháp thay thế tất cả các lần xuất hiện là:%s/old-text/new-text/g
g
chỉ định tất cả các lần xuất hiện trong dòng. Với g
lá cờ, bạn có thể thay thế toàn bộ dòng. Nếu g
cờ này không được sử dụng thì chỉ xuất hiện đầu tiên trong dòng sẽ được thay thế.n
chỉ định xuất số lần xuất hiện //
dấu gạch chéo kép thể hiện sự thiếu sót replacement text
. Bởi vì chúng tôi chỉ muốn tìm.Khi đã có số lần xuất hiện, bạn có thể Nhấn N
phím để xem từng lần xuất hiện.
Để tìm và đếm trong phạm vi cụ thể của dòng từ 1 đến 10:
: 1,10s / xin chào // gn
%
toàn bộ tệp được bổ sung bằng ,
các số dòng riêng biệt. Để tìm và thay thế trong phạm vi cụ thể của dòng từ 1 đến 10:
: 1,10s / helo / hello / gn
Tôi đề nghị làm:
*
để thực hiện "tìm kiếm có giới hạn" cho những gì bên dưới con trỏ hoặc thực hiện /pattern
tìm kiếm tiêu chuẩn .:%s///gn
để lấy số lần xuất hiện. Hoặc bạn có thể sử dụng :%s///n
để lấy số dòng có lần xuất hiện.** Tôi thực sự với tôi có thể tìm thấy một trình cắm sẽ đưa ra thông báo "khớp N của N 1 trên N 2 dòng" với mọi tìm kiếm, nhưng than ôi.
Lưu ý: Đừng nhầm lẫn bởi cách diễn đạt phức tạp của đầu ra. Lệnh trước có thể cung cấp cho bạn một cái gì đó giống như 4 matches on 3 lines
lệnh sau có thể cung cấp cho bạn 3 matches on 3 lines
. Mặc dù chính xác về mặt kỹ thuật , nhưng cái sau lại gây hiểu nhầm và phải nói là '3 dòng trùng khớp'. Vì vậy, như bạn có thể thấy, thực sự không bao giờ cần sử dụng dạng sau (chỉ 'n'). Bạn nhận được cùng một thông tin, rõ ràng hơn và hơn thế nữa bằng cách sử dụng biểu mẫu 'gn'.
:g/xxxx/d
) là khủng khiếp, nguy hiểm và kém hơn những câu trả lời khác trên trang này. Vui lòng bỏ chọn nó.