Я хочу найти строку и найти количество вхождений в файле с помощью редактора vi.
Я хочу найти строку и найти количество вхождений в файле с помощью редактора vi.
Ответы:
:g/xxxx/d
Это удалит все строки с шаблоном и сообщит, сколько удалено. Отменить, чтобы вернуть их после.
Путь
:% s / шаблон // gn
Тебе нужен nфлаг. Для подсчета слов используйте:
:%s/\i\+/&/gn
и конкретное слово:
:%s/the/&/gn
См. count-itemsРаздел документации.
Если вы просто наберете:
%s/pattern/pattern/g
тогда в строке состояния также будет указано количество совпадений в vi.
(похоже, как сказал Густаво, но дополнительно :)
Для любого предыдущего поиска вы можете просто:
:%s///gn
Шаблон не нужен, потому что он уже находится в поисковом регистре ( @/).
«%» - сделать s/во всем файле
«g» - поиск глобальный (с несколькими совпадениями в одной строке)
«n» - запретить замену s/- ничего не удаляется! ничего не должно быть отменено!
(см .: :help s_flagдля получения дополнительной информации)
(Таким образом, он отлично работает с « Поиском визуально выделенного текста », как описано в vim-wikia tip171 )
использовать
:% s / узор / \ 0 / g
когда строка шаблона слишком длинная и вам не нравится набирать ее снова.
Краткий ответ :
:% s / строка для поиска // gn
Для обучения :
В редакторе VI есть 3 режима, как показано ниже.

:вы входите из Commandв Command-lineрежим. Теперь все, что вы пишете после, :находится в CLI (интерфейсе командной строки)%sуказывает все строки. Указание диапазона как %средство подстановки во всем файле. Синтаксис для замены всех вхождений::%s/old-text/new-text/ggуказывает все вхождения в строке. С помощью gфлага вы можете заменить всю строку. Если этот gфлаг не используется, заменяется только первое вхождение в строке.n указывает на вывод количество вхождений //двойная косая черта означает пропуск replacement text. Потому что мы просто хотим найти.Получив количество вхождений, вы можете нажать Nклавишу, чтобы просмотреть вхождения один за другим.
Для поиска и подсчета в конкретном диапазоне номеров строк от 1 до 10:
: 1,10 с / привет // gn
%что весь файл заполняется ,разделенными номерами строк. Для поиска и замены, в частности, диапазона строк с 1 по 10:
: 1,10 с / helo / hello / gn
Предлагаю сделать:
*чтобы выполнить «ограниченный поиск» того, что находится под курсором, или выполните стандартный /patternпоиск.:%s///gnчтобы получить количество вхождений. Или вы можете использовать :%s///nдля получения количества строк с вхождениями.** Я действительно мог найти плагин, который выдавал бы сообщение «соответствует N из N 1 на N 2 строках» при каждом поиске, но, увы.
Примечание: пусть вас не смущает запутанная формулировка вывода. Первая команда может дать вам что-то вроде того, 4 matches on 3 linesчто может дать вам вторая 3 matches on 3 lines. Хотя последний технически точен, он вводит в заблуждение и должен сказать «3 строки совпадают». Итак, как видите, в действительности нет необходимости использовать последнюю (только "n") форму. Вы получите ту же информацию, более четко и многое другое, используя форму «gn».
:g/xxxx/d) ужасен, опасен и уступает другим на этой странице. Пожалуйста, отмените выбор.