2011-05-29 15:05:02 +0000 2011-05-29 15:05:02 +0000
221
221

Cancellare tutte le righe in Notepad++ eccetto le righe che contengono una parola di cui ho bisogno?

Ho un file di testo e voglio tenere le righe iniziate con <Path>, e cancellare tutte le altre righe.

Come posso farlo?

Risposte (10)

315
315
315
2011-06-03 20:23:06 +0000

C'è un modo semplice per raggiungere questo obiettivo. È necessario eseguire 2 passi.

  1. Vai al menu Cerca > Trova… > Selezionare la scheda “Segna”. 2. Attivare le espressioni regolari. 2. Cercare ^<Path> (^ è per l'inizio linea). Non dimenticare di controllare “Segnalibro linee” e premere “Segna tutti”

    1. Andare al menu “Cerca - Segnalibro - Rimuovi righe non contrassegnate”.
67
67
67
2013-02-27 16:03:51 +0000

Questo può essere fatto in due fasi a partire dal 6.3. Penso che si possa fare prima, visto che avevo 5,9 quando l'ho provato la prima volta.

Usando il post di stema come base di questa risposta. Ora c'è un passo in meno. Segnare le linee e rimuovere le linee non segnate. Fatto. Seguono istruzioni dettagliate.

    1. Ricerca nel menu “Trova”. 2. Nella finestra di dialogo Trova, fare clic sulla scheda “Segna”. 2. Attivare le espressioni regolari. 2. Cercare ^<Path> (^ è per l'inizio linea). Non dimenticare di controllare “Segnalibro linee” e premere “Segna tutti”
    1. Cerca Menu -> Segnalibro -> Rimuovi linee non contrassegnate.
30
30
30
2013-07-08 16:51:09 +0000

Soluzione pulita solo per il regex

variante a due passi

  1. regex sostituire

  2. sostituire

variante a un solo passo

variante a un passo

Utilizzare ^(?!<Path>).*\r\n per sostituire i fiammiferi con una stringa vuota. La versione generalizzata sarebbe ^(?!.*?test).*\r\n. Questo non eliminerà la riga vuota alla fine del file. Tutte le altre linee vengono rimosse, comprese più linee vuote consecutive._

Spiegazione:

  1. (?!) è un look up negativo. ^.*test.*$ seleziona l'intera linea che contiene il testo richiesto.

  2. [\r\n]{2,} corrisponde a qualsiasi \r\n che si verifica più di una volta che questa è la linea Windows New. se avete Linux o un altro sistema operativo potreste aver bisogno di pasticciare con questo. il secondo è quello di sostituirlo con una linea di ritorno.

5
5
5
2015-12-17 11:43:30 +0000

Mi sembra che il modo più semplice sia quello di utilizzare la funzione “Trova tutto nel documento corrente” e poi o copiare i risultati in un nuovo file o selezionare tutti e sostituire in quello corrente.

Questo troverebbe tutte le righe che contengono il vostro testo e le elencherebbe in fondo. Basta cliccare con il tasto destro del mouse sul risultato della ricerca e copiare/incollare.

4
4
4
2013-06-21 16:36:49 +0000

Vai al menu Ricerca -> Trova… -> Attivare le espressioni regolari. Cerca “^Percorso” (^ è per l'inizio linea).

Cliccare sul pulsante “Trova tutto nel documento corrente”.

La finestra “Trova risultato” apparirà con tutte le linee del modello. Selezionare copia/incolla in una nuova scheda in Notepad++.

In questa nuova scheda, andare a: menu Ricerca -> Sostituisci… -> Attivare le espressioni regolari.

Nel campo “Trova cosa:”, utilizzare il modello: “Riga \d+: ”. Lasciare il campo “Sostituisci con:” vuoto.

Cliccare sul pulsante “Sostituisci tutto”.

3
3
3
2011-05-30 01:02:36 +0000

A condizione che si voglia effettivamente abbinare <Path> e non un percorso di file system, si può provare questo da una riga di comando usando Perl:

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

Ha funzionato con Strawberry Perl su Windows, quindi regolare di conseguenza se i risultati non sono quelli che ci si aspetta.

3
3
3
2011-05-29 18:07:54 +0000

È maldestro, ma copia tutto su Excel , e poi usa =IF(LEFT(A1,6)="<Path>",A1,"") e copia quella formula fino in fondo. Poi copiarla di nuovo su Notepad++. Non è l'ideale, ma è abbastanza facile (se avete Excel). Attenzione: Non funzionerà bene con le linee dentellate (Excel sposterà le colonne, ecc.).

2
2
2
2011-05-30 03:00:09 +0000

Non c'è un modo semplice per fare ciò che si vuole con Notepad++. Dovrete scaricare un programma sul vostro computer o scrivere qualcosa in VB (suppongo che siate su Windows).

Potete fare quello che volete in uno dei due modi con sed. L'utilità sed è una delle preferite su *nix e può essere trovata per Windows dai grandi di GnuWin http://gnuwin32.sourceforge.net/packages/sed.htm ). Si scarica questo programma e poi si esegue il comando dal prompt dei comandi.

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

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

Suggerisco di usare la stampa delle righe che si desidera in un nuovo file. Il motivo è che probabilmente non otterrete la dichiarazione regex per la prima volta. L'utilità sed utilizza la Sintassi di base delle espressioni regolari (vedere il riferimento a http://www.regular-expressions.info/reference.html ). Se è qualcosa di simile a un percorso *nix (/var/wwww), allora avrete bisogno di uscire dal carattere / perché il vostro regex funzioni.

Esempio: sed -n '/^\/var\/www/p' file > newfile Questo stamperà tutte le linee che iniziano con ‘/var/wwww’. Se ho archiviato per sfuggire al carattere /, allora il comando avrebbe lanciato un errore. Si può sfuggire ad un carattere speciale (come /) con il carattere backslash \ .

1
1
1
2018-05-01 14:37:57 +0000

Soluzione migliore con regex sostituire:

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

e sostituire con niente

0
0
0
2011-05-29 15:16:28 +0000

Usare Cerca->Sostituisci e inserire un'espressione regolare come ^[^].* e sostituire tutto con una stringa vuota usando Regular expression. Il passo successivo è quello di trovare le righe vuote alla ricerca di \n\n sostituendo con \n usando Extended più volte fino a 0 occurrences were found. (usare \r\n\r\n e \r\n a seconda del formato del file). Se si hanno molte righe vuote in fila, è più veloce usare \n\n\n\n\n\n\n o anche più \n:s nella stringa di ricerca.