Как я нахожу все строки с больше, чем происшествиями N символа с помощью Vim

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

Примечание: Я использую gVim на машине Windows, таким образом, я не смогу использовать, любой *отклоняет определенные приемы.

TIA

1
задан 07.10.2010, 16:01

1 ответ

Можно использовать regexp для нахождения таких строк с нормальной поисковой функцией:

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

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

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

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

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


Если Ваши исходные данные являются “каналом, разграниченным”, то необходимо, вероятно, проверить, чтобы видеть, встроило ли какое-либо из значений символы вертикальной черты (возможно, сделанный путем выхода (например, снабдили префиксом обратную косую черту), удвоение или заключение в кавычки). regexp метод выше может быть расширен для покрытия большей части выхода и удвоения методов, но парсинг заключенных в кавычки значений обычно требует питания выразительное питание, чем большинство regexp языков может предложить.

1
ответ дан 17.12.2019, 00:32

Теги

Похожие вопросы