Я хочу найти строку и найти количество вхождений в файле с помощью редактора vi.
Найдите строку и подсчитайте в редакторе vi
Ответы (8)
:g/xxxx/d
Это удалит все строки с шаблоном и сообщит, сколько удалено. Отменить, чтобы получить их обратно после.
путь это
:%s/шаблон//gn
Вам нужен флаг n
. Для подсчета слов используйте:
:%s/\i\+/&/gn
и отдельное слово:
:%s/the/&/gn
См. раздел документации count-items
.
Если вы просто наберете:
%s/pattern/pattern/g
тогда в строке состояния также будет указано количество совпадений в vi.
:%s/string/string/g даст ответ.
%s/string//ng
.
- person slm; 01.12.2013
(аналогично тому, как сказал Густаво, но дополнительно:)
Для любого ранее поиска вы можете сделать просто:
:%s///gn
Шаблон не нужен, потому что он уже есть в поиске-регистре (@/
).
"%" - сделать s/
во всем файле
"g" - глобальный поиск (с несколькими совпадениями в одной строке)
"n" - запретить любую замену s/
-- ничего не удаляется! strong> ничего нельзя отменить!
(дополнительную информацию см.: :help s_flag
)
(Таким образом, он отлично работает с «Поиск визуально выделенного текста», как описано в вим-викиа подсказка171)
использовать
:%s/шаблон/\0/г
когда строка шаблона слишком длинная, и вы не хотите вводить ее снова.
Короткий ответ:
:%s/строка для поиска//gn
Для обучения:
В редакторе VI есть 3 режима, как показано ниже:
:
вы переходите из режимаCommand
в режимCommand-line
. Теперь все, что вы пишете после:
, находится в CLI (интерфейс командной строки).%s
указывает все строки. Указание диапазона как%
означает выполнение замены во всем файле. Синтаксис для замены всех вхождений::%s/old-text/new-text/g
g
указывает все вхождения в строке. С помощью флагаg
вы можете заменить всю строку. Если этот флагg
не используется, то будет заменено только первое вхождение в строке.n
указывает на вывод количества вхождений//
двойная косая черта представляет собой пропускreplacement text
. Потому что мы просто хотим найти.
Получив количество вхождений, вы можете нажать клавишу N
, чтобы увидеть вхождения одно за другим.
Для поиска и подсчета в определенном диапазоне номеров строк от 1 до 10:
:1,10 с/привет//gn
- Обратите внимание, что
%
для всего файла заменяется,
номерами строк, разделенными.
Для поиска и замены в определенном диапазоне строк с 1 по 10:
:1,10s/helo/hello/gn
Я предлагаю сделать:
- Выполните поиск либо с помощью
*
, чтобы выполнить «ограниченный поиск» того, что находится под курсором, либо выполните стандартный поиск/pattern
. - Используйте
:%s///gn
, чтобы получить количество вхождений. Или вы можете использовать:%s///n
, чтобы получить количество строк с вхождениями.
** Я действительно мог бы найти плагин, который выдавал бы сообщение "совпадение N из N1 в строках N2" с каждый поиск, но увы.
Примечание. Пусть вас не смущает сложная формулировка вывода. Первая команда может дать вам что-то вроде 4 matches on 3 lines
, тогда как вторая может дать вам 3 matches on 3 lines
. Хотя технически он точен, последний вводит в заблуждение и должен говорить «совпадение 3 строк». Итак, как вы можете видеть, на самом деле нет необходимости использовать последнюю (только 'n') форму. Вы получите ту же информацию, более четко и больше, используя форму 'gn'.
:g/xxxx/d
) ужасен, опасен и хуже других на этой странице. Отмените выбор. - person Bruno Bronosky   schedule 11.01.2017