Підняте - видаліть усі рядки, що містять конкретне значення


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

Ви можете виконувати пошук і заміну регулярних виразів:

Натисніть Знайти> Замінити.

Переконайтесь, що натиснута кнопка Regular Expression.

Щоб знайти поле "Знайти", поставте:

^.*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 Причина

64

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

Кілька редагування курсорів - це цікаво!


4
Це дуже корисна більш узагальнена порада. Моєю метою було видалити всі рядки, що містять рядок. Я вибрав один екземпляр, потім застосував "QuickFind" за допомогою ярлика, Ctrl+Cmd+Gяк пропонує Леонід для вибору всіх цих рядків. Після цього я міг перейти безпосередньо до "Видалити рядок" Ctrl-Shift-Kі хірургічно всі рядки цієї рядки були видалені за мить. Sublime Text - це найкращий текстовий редактор, який я коли-небудь використовував.
МіБ

Чи ctrl + cmd + g збігається з ctrl + alt + g у Windows? Я не міг змусити це працювати
чорна панда

@black panda Для Windows "Швидкий пошук усіх" - alt + f3 - Спасибі Леонід +1
Крістофер

Якщо ви схожі на мене і у вас немає кнопки «Головна», ви також можете використовувати CMD + <- (стрілка вліво)
Koray Tugay

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

53

я не міг змусити регулярний випадок працювати, тому я використав підхід Alt-F3 з цієї відповіді:

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

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

2
Дві речі: (1) Ви можете прив’язати до індивідуальної відповіді на зразок цієї (2) Ви повинні узагальнити іншу відповідь тут (і спеціалізувати її, щоб відповісти на це запитання як слід).
помітний укладач

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
користувач

Якщо рядки мають структуру "abc / xyz / something", використовувати regex add '\'. Наприклад, якщо нам доведеться шукати що-небудь між abc / та / чогось, то вираз буде таким: 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.