Sublime: elimina tutte le righe contenenti un valore specifico


116

Ho un file di registro da 900 MB che posso aprire in SublimeText 3. Questo file è gonfio di linee simili al seguente.

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

Come posso filtrare tutte le righe che contengono No records to send and/or not connected


Mentre le soluzioni seguenti funzionano, questo tipo di lavoro dovrebbe essere fatto con sed / awk per file di grandi dimensioni.
Bar

Risposte:


229

Puoi eseguire una ricerca e sostituzione di espressioni regolari:

Fare clic su Trova> Sostituisci.

Verificare che il pulsante Espressione regolare sia premuto.

Per il campo Trova, inserisci:

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

Lascia vuoto il campo Sostituisci con.

Fare clic su Sostituisci tutto


16
Il punto / punto alla fine è importante, senza di esso non funzionerà. In alternativa, puoi usare questo:^.*No records to send and/or not connected\S.*$
Navigatron

Questa soluzione è l'unica fattibile se stai operando su un file di grandi dimensioni. La mia macchina si è bloccata per diversi minuti quando ho fatto Ctrl+Shift+Kcon 200.000 linee selezionate.
Przemek D

Lo proverò con il mio file da 26.000.000 di righe: ')
YB Causa

64

Per le persone che non vogliono scrivere una regex, puoi semplicemente selezionare la stringa di ricerca, premere ctrl+cmd+go scegliere "Quick Find All" dal menu, che ti darà le selezioni per ogni stringa corrispondente; da lì Homesposterà ogni cursore di selezione all'inizio della riga, shift+Endselezionerà ogni riga corrispondente e del, delle cancellerà tutte.

La modifica di più cursori è divertente!


4
Questo è un suggerimento più generico e molto utile. Il mio obiettivo era eliminare tutte le righe contenenti una stringa. Ho finito per selezionare un'istanza di esso, quindi ho usato "QuickFind" con la scorciatoia Ctrl+Cmd+Gcome suggerisce Leonid per selezionare tutte quelle stringhe. Dopodiché potrei passare direttamente a "Elimina riga" Ctrl-Shift-Ke chirurgicamente tutte le righe con questa stringa sono state rimosse in un istante. Sublime Text è davvero il miglior editor di testo che abbia mai usato.
MiB

Ctrl + cmd + g è uguale a ctrl + alt + g su Windows? Non sono riuscito a farlo funzionare
panda nero,

@black panda Per Windows "Quick Find All" è alt + f3 - Grazie Leonid +1
Christopher

Se sei come me e non hai un pulsante Home, puoi anche usare CMD + <- (freccia sinistra)
Koray Tugay

4
Puoi anche usare cmd + L per espandere la selezione alla linea.
Koray Tugay

53

Non sono riuscito a far funzionare la regex, quindi ho usato l'approccio Alt-F3 da questa risposta:

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

  1. Selezionare stringa di interesse
  2. Premi Alt+ F3per entrare in modalità multi-cursore su tutte le occorrenze ( Ctrl+ CMD+ Gsu Mac OS X)
  3. Premi Ctrl+ L[vedi commenti] ( Cmd+ Lsu Mac)
  4. Copia e incolla la selezione in un altro buffer
  5. Del

2
Due cose: (1) Puoi collegarti a una risposta individuale come questa (2) Dovresti riassumere qui l'altra risposta (e specializzarla per rispondere a questa domanda come appropriato).
Compilatore cospicuo

4
È possibile sostituire i passaggi 3 e 4 con CTRL + L, che espande le selezioni a intere righe, inclusa l'interruzione di riga.
Chnossos

2
Per quelli come me maledetti da uno schema di tasti MAC: Ctrl+Cmd+Ga per multi-cursore su tutte le occorrenze, Cmd+Lper espandere le righe e il solito copia / incolla
Cyril Duchon-Doris

27

Questo è quello che ho trovato per gli utenti di Windows:

  1. Seleziona la stringa (ogni riga contenente questa stringa deve essere rimossa).
  2. Premi ALT + F3.
  3. Premi Ctrl + L.
  4. Premi Elimina.

21

Nessuno dei codici regex suggerito sopra ha funzionato nel mio caso, ma ha funzionato:

.*(text in question).*

Lascerà righe vuote sul tuo codice, è quello che vuoi? In caso contrario, aggiungere \no $alla fine:.*(text in question).*\n
utente

Se le righe hanno "abc / xyz / qualcosa" come la struttura, per usare regex aggiungi '\'. Ad esempio, se dobbiamo cercare qualcosa tra abc / e / qualcosa, l'espressione sarà: abc /\.*.*\/ qualcosa
Avik

Funziona per me, se hai bisogno di più corrispondenze come ho fatto io, usa |così:.*(a).*|.*(b).*|.*(c).*
bryc

0

Ho riscontrato un problema simile durante la modifica di una mappa del sito

Questo ha funzionato per me:

  1. Copia l'ultima parola nelle righe che desideri eliminare
  2. Trova tutto
  3. Premere Elimina per eliminare l'intera riga

0

Le risposte sopra sono i modi corretti, ma se vuoi eliminare le righe anche con una singola stringa, fallo, Trova -> Sostituisci -> metti ^.*[a-zA-Z]+.*\nnella sezione Trova e mantieni la sostituzione con vuoto. Premi il pulsante Sostituisci tutto per eliminare tutte le righe con anche una singola stringa.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.