Ищите и удалите несколько строк

В энергии

:g/George Bush/d

удаляет все строки с George Bush.

Что, если я хотел удалить 5 строк ниже того запуска с George Bush?

Другой реалистический пример состоял бы в том, чтобы найти, что вся ОТЛАДКА в log4net регистрирует и удаляет в конец отслеживания стека (который я знаю, будут еще 10 строк ниже его),

37
задан Brian Tompsett - 汤莱恩 6 July 2015 в 11:23
поделиться

2 ответа

Глобальная команда - твой друг - хорошо учись. Она позволяет выполнять произвольные команды :ex на каждой строке, которая совпадает с регексом. Сокращенно :g.

Для удаления всех строк, которые соответствуют "Джорджу Бушу":

:g/George Bush/ d

Следующая команда может иметь свой префикс адреса/диапазона, который будет относиться к соответствующей строке. Таким образом, чтобы удалить 5-ю строку после Джорджа Буша:

:g/George Bush/ .+5 d

Чтобы удалить записи DEBUG лога:

:g/DEBUG/ .,+10 d

Если вы знали, что трасса стека была переменной длины, но всегда заканчивалась пустой строкой (или другим регексом):

:g/DEBUG/ .,/^$/ d

Вы также можете выполнить команду на каждой строке, которая НЕ совпадает с :g!.. Например чтобы заменить "Bush" на "Obama" в каждой строке, которая не содержит слова "sucks":

 :g!/sucks/ s/Bush/Obama/

Команда по умолчанию выводит строку в окно сообщения. Например, чтобы перечислить каждую строку, помеченную TODO:

 :g/TODO

Это также полезно для проверки соответствия регексов ожидаемым строкам перед тем, как вы сделаете что-то разрушительное.

Вы можете соединить в цепочку несколько команд, используя "|". Например. изменить Bush на Obama AND George на Barack в каждой строке, которая не содержит "sucks":

 :g!/sucks/ s/Bush/Obama/g | s/George/Barack/g
97
ответ дан 27 November 2019 в 04:09
поделиться

: г / Джордж Буш / d 6

6
ответ дан 27 November 2019 в 04:09
поделиться
Другие вопросы по тегам:

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