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?
Ho un file di testo e voglio tenere le righe iniziate con <Path>
, e cancellare tutte le altre righe.
Come posso farlo?
C'è un modo semplice per raggiungere questo obiettivo. È necessario eseguire 2 passi.
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”
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.
^<Path>
(^
è per l'inizio linea). Non dimenticare di controllare “Segnalibro linee” e premere “Segna tutti” regex sostituire
sostituire
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._
(?!)
è un look up negativo. ^.*test.*$
seleziona l'intera linea che contiene il testo richiesto.
[\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.
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.
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”.
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.
È 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.).
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 \ .
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.