Я хочу найти строку и найти количество вхождений в файле с помощью редактора 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/g
g
указывает все вхождения в строке. С помощью 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
) ужасен, опасен и уступает другим на этой странице. Пожалуйста, отмените выбор.