Я пытаюсь найти все строки в файле, где |
символ (вертикальная черта) встречается более 21 раза. Символ |
является разделителем полей, поэтому нет определенного количества символов, которые могут встречаться между |
экземплярами. Есть ли простой способ сделать это в Vim?
ПРИМЕЧАНИЕ: Я использую gVim на машине с Windows, поэтому я не смогу использовать какие-либо специфичные для *nix трюки.
ТИА
решение1
Вы можете использовать регулярное выражение для поиска таких строк с помощью обычной функции поиска:
/\v(\|[^|]*){21,}
Гарантирует \v
, что регулярное выражение будет работать независимо от значения параметра magic
(он делает все небуквенно-цифровые символы (кроме подчеркивания) специальными; я также использую его здесь, чтобы избежать необходимости ставить обратные косые черты перед (
, )
, {
, и }
).
Если вы хотите увидеть все такие строки сразу, то вы можете объединить это с командой :g
:
:g/\v(\|[^|]*){21,}/p
Кстати, этот тип команды (отбывшийпредшественникви) — источник названия инструмента grep
( g/re/p
: re — сокращение от regexp).
Если исходные данные «разделены вертикальной чертой», то вам, вероятно, следует проверить, не содержат ли какие-либо значения встроенные символы вертикальной черты (возможно, с помощью экранирования (например, с префиксом в виде обратной косой черты), удвоения или кавычек). Метод регулярных выражений выше можно расширить, чтобы охватить большинство методов экранирования и удвоения, но для разбора заключенных в кавычки значений обычно требуется более мощная выразительная мощность, чем может предложить большинство языков регулярных выражений.