Eliminare tutte le righe in Notepad ++ tranne le righe contenenti una parola di cui ho bisogno?


Risposte:


292

C'è un modo semplice per raggiungere questo obiettivo. È necessario eseguire 3 passaggi.

  1. Vai al menu Cerca> Trova ...> Seleziona la scheda "Segna". Attiva le espressioni regolari. Cerca ^<Path>( ^è per l'inizio della linea). Non dimenticare di selezionare "Righe segnalibro" e premere "Seleziona tutto"

    ==> Tutte le righe che vuoi mantenere hanno un segnalibro

  2. Vai al menu "Cerca - Segnalibro - Segnalibro inverso"

    ==> Tutte le righe che si desidera eliminare sono inserite nei segnalibri.

  3. Vai al menu "Cerca - Aggiungi ai segnalibri - Rimuovi le righe aggiunte ai segnalibri"

    ==> Tutte le righe aggiunte ai segnalibri vengono eliminate.


47
+1. Bello, non lo sapevo. Ci sono anche opzioni per "Rimuovi linee non contrassegnate" o "Taglia / copia linee contrassegnate" che possono farti risparmiare un po 'di tempo.
Deizel,

6
Inizialmente ho avuto problemi perché la mia versione (6.2.3) di Notepad ++ non ha una voce di menu chiamata "Mark Tab". Invece, devi andare su "Cerca" -> "Trova ..." -> fai clic sulla scheda "Segna". E non è più necessario invertire i segnalibri. Notepad ++ ora ha "Rimuovi linee non contrassegnate". Ma il tuo consiglio mi ha aiutato molto! Grazie!
aakoch,

22
Puoi saltare il passaggio 2, perché (almeno dalla v6.4.5) è possibile scegliere "Rimuovi linee non contrassegnate".
Julian,

4
Sto usando Notepad ++ da così tanto tempo e non ho mai saputo cosa sono i "Segnalibri" prima. Incredibile quanto sia potente questo strumento e quanto poco ne so.
Danubian Sailor,

Sei un genio. questo è solo un altro esempio scioccante di come conoscere lo strumento che usi davvero.
Marcello Grechi Lins,

67

Questo può effettivamente essere fatto in due passaggi a partire da 6.3. Penso che possa essere fatto prima di quello che avevo 5.9 quando l'ho provato per la prima volta.

Usando il post di stema come base di questa risposta. C'è un passo in meno ora. Contrassegnare le linee e rimuovere le linee non contrassegnate. Fatto. Seguono istruzioni dettagliate.

  1. Menu di ricerca "Trova". Nella finestra di dialogo Trova, fai clic sulla scheda "Seleziona". Attiva le espressioni regolari. Cerca ^<Path>( ^è per l'inizio della linea). Non dimenticare di selezionare "Righe segnalibro" e premere "Seleziona tutto"

    ==> Tutte le righe che vuoi mantenere ora hanno un segnalibro

  2. Menu Cerca -> Segnalibro -> Rimuovi linee non contrassegnate.

    ==> Tutte le righe NON segnalibro vengono eliminate.


3
Mi ci sono voluti 10 secondi mentre l'altra soluzione mi ha richiesto> 20 secondi. Grazie!
Nero,

Non ho avuto bisogno di aggiungere il ^termine di ricerca, né usare espressioni regolari. Spero che questo aiuti qualcuno.
sa_leinad,

29

Pulisci la soluzione regex only

Variante in due passaggi

  1. regex sostituire

    (?!^.*test.*$)^.+
    

    sostituire il test con il testo richiesto

  2. sostituire

    [\r\n]{2,}
    

    con \r\n

Variante a passo singolo

Usa ^(?!<Path>).*\r\nper sostituire le partite con una stringa vuota. La versione generalizzata sarebbe ^(?!.*?test).*\r\n. Questo non rimuoverà la riga vuota alla fine del file. Tutte le altre righe vengono rimosse, incluse più righe vuote consecutive.

Spiegazione:

  1. (?!)è uno sguardo negativo. ^.*test.*$ seleziona l'intera riga che contiene il testo richiesto.

  2. [\r\n]{2,}corrisponde a quelli \r\nche si verificano più di una volta che si tratta della nuova riga di Windows. se si dispone di Linux o di un altro sistema operativo, potrebbe essere necessario confonderlo. il secondo è sostituirlo con una linea di ritorno.


1
Nota per i popoli: a volte regex con end of line (EOL) "non funziona". La \r\nEOL menzionata nel post è ciò che utilizza Windows e quindi potrebbe essere o meno ciò che stai cercando. Spesso negli ambienti Linux è solo \no solo negli ambienti Mac \r, quindi se si estrae un file da uno di questi, non sarà EOL in stile Windows. Tuttavia, se si esegue il download tramite trigger di modalità FileZilla e ASCII, è possibile ripristinarli in Windows EOL (come \nin \r\n). Quindi, se regex non funziona, controlla lo stile EOL andando su "Visualizza> Mostra simboli> Mostra fine linea". CR = \r. LF = \n.
Dhaupin,

5

Mi sembra che il modo più semplice sia usare la funzione "Trova tutto nel documento corrente" e quindi copiare i risultati in un nuovo file o selezionare tutto e sostituire in quello corrente.

Questo troverebbe tutte le righe che contengono il tuo testo e le elenco in fondo. Basta fare clic destro sul risultato della ricerca e copiare / incollare.


È necessario rimuovere i numeri di riga sostituendoli \tLine [\d]*: . Ancora un'ottima risposta.
Noumenon,

Questo non funzionerà per le linee così larghe che Notepad ++ lo tronca nella finestra dei risultati della ricerca.
MasterJoe2

4

Vai al menu Cerca -> Trova ... -> Attiva espressioni regolari. Cerca "^ Path " (^ è per l'inizio della linea).

Fai clic sul pulsante "Trova tutto nel documento corrente".

Verrà visualizzata la finestra "Trova risultato" con tutte le linee del motivo. Seleziona copia / incollali in una nuova scheda in Notepad ++.

In questa nuova scheda, vai a: menu Cerca -> Sostituisci ... -> Attiva espressioni regolari.

Nel campo "Trova cosa:", usa il modello: "Linea \ d +:". Lascia vuoto il campo "Sostituisci con:".

Fai clic sul pulsante "Sostituisci tutto".


3

A condizione che tu voglia effettivamente abbinare <Path>e non un percorso del file system, puoi provarlo da una riga di comando usando Perl:

perl -pe " if ($_ !~ /<Path>/) { s/$_// } " < in.txt > out.txt

Ha funzionato con Strawberry Perl su Windows, quindi regola di conseguenza se i risultati non sono quelli che ti aspetti.


3

È goffo, ma copia tutto in Excel , quindi usa =IF(LEFT(A1,6)="<Path>",A1,"")e copia quella formula fino in fondo. Quindi copiarlo nuovamente su Notepad ++. Non è l'ideale, ma è abbastanza facile (se hai Excel). Avvertenza: non funzionerà bene con le linee rientrate (Excel sposta le colonne, ecc.).


Quando esistono diversi modi per gestire direttamente questa attività, perché dovresti voler copiare in modo distruttivo in un'altra applicazione, elaborarla e trasferirla di nuovo?
Baldrickk,

1

Non esiste un modo semplice per fare ciò che vuoi con Notepad ++. Dovrai scaricare un programma sul tuo computer o eseguire lo script di qualcosa in VB (suppongo che tu sia su Windows).

Puoi fare quello che vuoi in due modi con sed. L'utilità sed è una delle preferite su * nix e può essere trovata per Windows dalle persone fantastiche di GnuWin ( http://gnuwin32.sourceforge.net/packages/sed.htm ). Scaricare questo programma e quindi eseguire il comando dal prompt dei comandi.

Elimina tutte le righe che non contengono:
sed -i '/^<PATH>/!d' file

Stampa tutte le righe contenenti in un nuovo file:
sed -n '/^<PATH>/p' file > newfile

Ti suggerisco di usare stampare le righe che vuoi su un nuovo file. La ragione di ciò è che probabilmente non otterrai l'istruzione regex per la prima volta. L'utilità sed utilizza la sintassi di base delle espressioni regolari (consultare il riferimento su http://www.regular-expressions.info/reference.html ). Se è qualcosa come un percorso * nix (/ var / www), allora dovrai sfuggire al carattere / per far funzionare il tuo regex.

Esempio: sed -n '/^\/var\/www/p' file > newfile
questo stamperà tutte le righe che iniziano con '/ var / www'. Se avessi richiesto di sfuggire al carattere /, il comando avrebbe generato un errore. Puoi sfuggire a un carattere speciale (come /) con il carattere barra rovesciata \.


Questa potrebbe essere una vecchia risposta, ma dato che in realtà ha 2 voti (-1 ora da me) ha voluto commentare non solo quanto sia sbagliato, ma ribadire in un'operazione di comando SINGOLO come ho appena (di nuovo) preso una linea> 100k file di registro fino alle 34 righe contenenti una parola (o frase) in questo caso semplicemente "errore" in meno di 3 secondi semplicemente posizionando questa regex nel FIND WHAT: ^ (?!. *? error). * \ r \ ne lasciando vuoto SOSTITUIRE CON, e NON selezionare ". abbina riga" e fare clic su "SOSTITUIRE TUTTO". Sì, adoro anche sed e awk, ma dire che la NPP non può farlo è semplicemente falso.
Collin Chaffin,

1

La soluzione migliore con regex sostituisce:

(?!^.*SOMETEXT.*$)^.+\r?\n

E sostituisci con niente


1
Benvenuto in Super User! Ti interessa spiegare questo per coloro che potrebbero non sapere cosa fa ogni bit della regex? :)
bertieb,

0

Usa Cerca-> Sostituisci e inserisci un'espressione regolare come ^[^ ].*e sostituisci tutto con una stringa vuota usando Regular expression. Il prossimo passo è trovare le righe vuote che cercano di \n\nsostituirle \nusando Extendedpiù volte fino a 0 occurrences were found.(usare \r\n\r\ne in \r\nbase al formato del file). Se hai molte righe vuote di fila, è più veloce da usare \n\n\n\n\n\n\no anche di più \n: s nella stringa di ricerca.

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.