Sublime - удалить все строки, содержащие определенное значение


116

У меня есть файл журнала размером 900 МБ, который я могу открыть в SublimeText 3. В этом файле есть строки, подобные приведенным ниже.

10/08/2014 23:45:31:828,Information,,,,ExportManager: ,No records to send and/or not connected

Как отфильтровать все строки, содержащие No records to send and/or not connected


Хотя приведенные ниже решения работают, этот тип работы действительно должен выполняться с помощью sed / awk для больших файлов.
Бар

Ответы:


229

Вы можете выполнить поиск и замену регулярного выражения:

Щелкните Найти> Заменить.

Убедитесь, что кнопка «Регулярное выражение» нажата.

В поле Найти укажите:

^.*No records to send and/or not connected.*\n

Оставьте поле «Заменить на» пустым.

Нажмите " Заменить все".


16
Полная остановка / период в конце важна, без нее не получится. В качестве альтернативы вы можете использовать это:^.*No records to send and/or not connected\S.*$
Navigatron

Это решение является единственно возможным, если вы работаете с большим файлом. Моя машина зависла на несколько минут, когда я Ctrl+Shift+Kвыбрал 200 000 строк.
Przemek D

Я попробую это с моим файлом из 26 000 000 строк: ')
YB Cause

64

Для людей, которые не хотят писать регулярное выражение - вы можете просто выбрать строку поиска, нажать ctrl+cmd+gили выбрать «Быстрый поиск всех» в меню, что даст вам выбор для каждой совпадающей строки; оттуда Homeпереместит каждый курсор выбора в начало строки, shift+Endвыберет каждую совпадающую строку иdel, del удалит их все.

Редактирование нескольких курсоров - это весело!


4
Это очень полезный обобщенный совет. Моей целью было удалить все строки, содержащие строку. В итоге я выбрал один экземпляр, а затем использовал «QuickFind» с ярлыком, Ctrl+Cmd+Gкак предлагает Леонид, для выбора всех этих строк. После этого я мог сразу перейти к «Удалить Ctrl-Shift-Kстроку », и хирургическим путем все строки с этой строкой были удалены в одно мгновение. Sublime Text действительно лучший текстовый редактор, который я когда-либо использовал.
MiB

Ctrl + cmd + g - это то же самое, что ctrl + alt + g в Windows? Я не мог заставить это работать
черная панда

@black panda Для windows "Быстрый поиск всех" - alt + f3 - Спасибо Леонид +1
Кристофер

Если вы похожи на меня и у вас нет кнопки «Домой», вы также можете использовать CMD + <- (стрелка влево)
Корай Тугай

4
Вы также можете использовать cmd + L, чтобы расширить выделение до строки.
Корай Тугай

53

Мне не удалось заставить регулярное выражение работать, поэтому я использовал подход Alt-F3 из этого ответа:

/superuser/452189/how-can-i-filter-a-file-for-lines-containing-a-string-in-sublime-text-2/598999#598999

  1. Выберите интересующую строку
  2. Нажмите Alt+, F3чтобы перейти в режим с несколькими курсорами во всех случаях ( Ctrl+ CMD+ Gв Mac OS X)
  3. Hit Ctrl+ L[см. Комментарии] ( Cmd+ Lна Mac)
  4. Копировать и вставить выделение в другой буфер
  5. Del

2
Две вещи: (1) Вы можете дать ссылку на индивидуальный ответ, подобный этому (2) Вы должны резюмировать здесь другой ответ (и конкретизировать его, чтобы ответить на этот вопрос соответствующим образом).
Conspicuous Compiler

4
Вы можете заменить шаги 3 и 4 на CTRL + L, что расширяет выбор до целых строк, включая разрыв строки.
Chnossos

2
Для таких, как я, проклятых схемой клавиш MAC: Ctrl+Cmd+Gдля множественного курсора во всех случаях, Cmd+Lдля расширения строк и обычного копирования / вставки
Сирил Дюшон-Дорис

27

Вот что я нашел для пользователей Windows:

  1. Выберите строку (каждая строка, содержащая эту строку, должна быть удалена).
  2. Нажмите ALT + F3.
  3. Нажмите Ctrl + L.
  4. Нажмите Удалить.

21

Ни один из предложенных выше кодов регулярных выражений в моем случае не работал, но это сработало:

.*(text in question).*

Это позволит пустым строкам в вашем коде, вы хотите? Если нет, добавьте \nили $в конце:.*(text in question).*\n
user

Если строки имеют структуру типа «abc / xyz / something», для использования регулярного выражения добавьте '\'. Например, если нам нужно найти что-то между abc / и / something, тогда выражение будет выглядеть следующим образом: abc /\.*.*\/ something
Avik

Подходит для меня, если вам нужно несколько совпадений, как я, используйте |так:.*(a).*|.*(b).*|.*(c).*
bryc

0

Я столкнулся с аналогичной проблемой при редактировании карты сайта

Это сработало для меня:

  1. Скопируйте последнее слово в строках, которые хотите удалить
  2. Найти все
  3. Нажмите удалить, чтобы удалить всю строку

0

Вышеуказанные ответы являются правильными способами, но если вы хотите избавиться от строк даже с одной строкой, сделайте это, найдите -> Заменить -> поместите ^.*[a-zA-Z]+.*\nв раздел поиска и продолжайте заменять пустым. Нажмите кнопку «Заменить все», это приведет к удалению всех строк, содержащих даже одну строку.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.