Sublime - hapus semua baris yang mengandung nilai tertentu

116

Saya memiliki file log 900mb yang dapat saya buka di SublimeText 3. File ini membengkak dengan garis yang mirip dengan berikut ini.

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

Bagaimana cara menyaring semua baris yang berisi No records to send and/or not connected

energ1ser
sumber
Sementara solusi di bawah berfungsi, jenis pekerjaan ini benar-benar harus dilakukan dengan sed / awk untuk file besar.
Bar

Jawaban:

229

Anda dapat melakukan pencarian dan penggantian ekspresi reguler:

Klik Temukan> Ganti.

Pastikan tombol Ekspresi Reguler telah ditekan.

Untuk bidang Find What, masukkan:

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

Biarkan bidang Ganti Dengan kosong.

Klik Ganti Semua

Jonathan Aquino
sumber
16
Titik / titik di akhir adalah penting, tanpanya, itu tidak akan berhasil. Atau, Anda dapat menggunakan ini:^.*No records to send and/or not connected\S.*$
Navigatron
Solusi ini adalah satu-satunya solusi yang memungkinkan jika Anda mengoperasikan file besar. Mesin saya macet selama beberapa menit ketika saya melakukannya Ctrl+Shift+Kdengan 200.000 baris yang dipilih.
Przemek D
Saya coba ini dengan file baris saya yang
YB Penyebab
64

Untuk orang yang tidak ingin menulis regex - Anda cukup memilih string pencarian, tekan ctrl+cmd+gatau pilih "Cari Cepat Semua" dari menu, yang akan memberi Anda pilihan untuk setiap string yang cocok; dari sana Homeakan memindahkan setiap kursor pilihan ke awal baris, shift+Endakan memilih setiap baris yang cocok, dan del, delakan menghapus semuanya.

Pengeditan beberapa kursor itu menyenangkan!

Leonid Shevtsov
sumber
4
Ini adalah tip yang lebih umum yang sangat berguna. Tujuan saya adalah menghapus semua baris yang mengandung string. Saya akhirnya memilih satu contoh kemudian menggunakan "QuickFind" dengan pintasan Ctrl+Cmd+Gseperti yang disarankan Leonid untuk memilih semua string tersebut. Setelah ini saya bisa langsung pergi ke "Hapus Garis" Ctrl-Shift-Kdan pembedahan semua garis dengan tali ini dihapus dalam sekejap. Sublime Text benar-benar editor teks terbaik yang pernah saya gunakan.
MiB
Apakah ctrl + cmd + g sama dengan ctrl + alt + g di Windows? Saya tidak bisa mendapatkan ini untuk bekerja
panda hitam
@black panda Untuk windows "Cari Cepat Semua" adalah alt + f3 - Terima kasih Leonid +1
Christopher
Jika Anda seperti saya dan Anda tidak memiliki tombol Beranda, Anda juga dapat menggunakan CMD + <- (panah kiri)
Koray Tugay
4
Anda juga dapat menggunakan cmd + L untuk memperluas pilihan ke garis.
Koray Tugay
53

saya tidak bisa mendapatkan regex untuk bekerja jadi saya menggunakan pendekatan Alt-F3 dari jawaban ini:

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

  1. Pilih string yang diminati
  2. Tekan Alt+ F3untuk masuk ke mode multi-kursor di semua kejadian ( Ctrl+ CMD+ Gdi Mac OS X)
  3. Tekan Ctrl+ L[lihat komentar] ( Cmd+ Ldi Mac)
  4. Salin-tempel pilihan ke buffer lain
  5. Del
denfromufa
sumber
2
Dua hal: (1) Anda dapat menautkan ke jawaban individu seperti ini (2) Anda harus meringkas jawaban lain di sini (dan mengkhususkan untuk menjawab pertanyaan ini sebagaimana mestinya).
Penyusun yang mencolok
4
Anda bisa mengganti langkah 3 dan 4 dengan CTRL + L, yang memperluas pilihan ke seluruh baris, termasuk hentian baris.
Chnossos
2
Bagi mereka seperti saya dikutuk oleh skema kunci MAC: Ctrl+Cmd+Guntuk multi-kursor pada semua kejadian, Cmd+Luntuk memperluas garis, dan salin / tempel biasa
Cyril Duchon-Doris
27

Inilah yang saya temukan untuk pengguna windows:

  1. Pilih string (setiap baris yang berisi string ini akan dihapus).
  2. Tekan ALT + F3.
  3. Tekan Ctrl + L.
  4. Tekan Hapus.
Goel Prashant
sumber
21

Tak satu pun dari kode regex yang disarankan di atas berfungsi dalam kasus saya, tetapi ini berhasil:

.*(text in question).*
Magnus
sumber
Ini akan membiarkan baris kosong pada kode Anda, apakah Anda mau? Jika tidak, tambahkan \natau $di akhir:.*(text in question).*\n
pengguna
Jika baris memiliki struktur seperti "abc / xyz / sesuatu", gunakan regex tambahkan '\'. Misalnya jika kita harus mencari apa pun di antara abc / dan / sesuatu maka ekspresi akan menjadi: abc /\.*.*\/ sesuatu
Avik
Berfungsi untuk saya, Jika Anda membutuhkan beberapa pertandingan seperti yang saya lakukan, gunakan |seperti ini:.*(a).*|.*(b).*|.*(c).*
bryc
0

Saya mengalami masalah serupa saat mengedit peta situs

Ini berhasil untuk saya:

  1. Salin kata terakhir di baris yang ingin Anda hapus
  2. Temukan semua
  3. Tekan delete untuk menghapus seluruh baris
Pete Varley
sumber
0

Jawaban di atas adalah cara yang benar, tetapi jika Anda ingin menghilangkan baris bahkan dengan satu string maka lakukan, Temukan -> Ganti -> letakkan ^.*[a-zA-Z]+.*\nDi bagian temukan dan tetap ganti dengan kosong. Tekan tombol ganti semua ini akan menghapus semua baris bahkan dengan satu string di dalamnya.

shubham mishra
sumber