Как найти все строки, в которых символ встречается более N раз, используя Vim?

Как найти все строки, в которых символ встречается более N раз, используя Vim?

Я пытаюсь найти все строки в файле, где |символ (вертикальная черта) встречается более 21 раза. Символ |является разделителем полей, поэтому нет определенного количества символов, которые могут встречаться между |экземплярами. Есть ли простой способ сделать это в Vim?

ПРИМЕЧАНИЕ: Я использую gVim на машине с Windows, поэтому я не смогу использовать какие-либо специфичные для *nix трюки.

ТИА

решение1

Вы можете использовать регулярное выражение для поиска таких строк с помощью обычной функции поиска:

/\v(\|[^|]*){21,}

Гарантирует \v, что регулярное выражение будет работать независимо от значения параметра magic(он делает все небуквенно-цифровые символы (кроме подчеркивания) специальными; я также использую его здесь, чтобы избежать необходимости ставить обратные косые черты перед (, ), {, и }).

Если вы хотите увидеть все такие строки сразу, то вы можете объединить это с командой :g:

:g/\v(\|[^|]*){21,}/p

Кстати, этот тип команды (отбывшийпредшественникви) — источник названия инструмента grep( g/re/p: re — сокращение от regexp).


Если исходные данные «разделены вертикальной чертой», то вам, вероятно, следует проверить, не содержат ли какие-либо значения встроенные символы вертикальной черты (возможно, с помощью экранирования (например, с префиксом в виде обратной косой черты), удвоения или кавычек). Метод регулярных выражений выше можно расширить, чтобы охватить большинство методов экранирования и удвоения, но для разбора заключенных в кавычки значений обычно требуется более мощная выразительная мощность, чем может предложить большинство языков регулярных выражений.

Связанный контент