1

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

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

ТИА

1 ответ1

1

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

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

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

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

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

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


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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .