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

energ1ser
источник
Хотя приведенные ниже решения работают, этот тип работы действительно должен выполняться с помощью 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
denfromufa
источник
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в раздел поиска и продолжайте заменять пустым. Нажмите кнопку «Заменить все», это приведет к удалению всех строк, содержащих даже одну строку.

Шубхам Мишра
источник