Regex: rimuove le righe che contengono "help", ecc


372

Ho un lungo documento di comandi. Utilizzando Notepad ++ o regex, desidero eliminare tutte le righe contenenti "help", incluso keyboard_help, ecc.

Come si può fare?

Risposte:


947

Questo è possibile anche con Notepad ++:

  • Vai al menu di ricerca, Ctrl+ Fe apri la scheda Contrassegna .
  • Controlla la riga dei segnalibri (se non è presente alcun aggiornamento della scheda Contrassegna alla versione corrente).

  • Inserisci il termine di ricerca e fai clic su Segna tutto

    • Tutte le righe che contengono il termine di ricerca sono inserite nei segnalibri.
  • Ora vai al menu CercaSegnalibroRimuovi righe segnalibro

  • Fatto.


36
Si! Ha anche "Rimuovi le linee non segnate", che è come grep, esattamente quello di cui avevo bisogno!
Chloe,

6
Grazie, questo è un bel trucco. Preferirei farlo con pochi semplici clic piuttosto che accendere una console Unix (ignorando che sono principalmente su Windows), cdnel percorso e digitare un comando complesso (preoccuparsi della sintassi e di rovinare definitivamente quindi realizzare non c'è backup). [ Non fraintendetemi, utilizzo sempre i comandi della console per altre cose, ma per qualcosa del genere, è solo un eccesso.]
ADTC

2
Mi ha fatto risparmiare un sacco di tempo :-)
Brlja il

3
il controllo BOOKMARK LINEè importante qui altrimenti non funzionerà !.
HaSeeB MiR

1
@AndrewSchultz, scusa, ma no.
Stema,

187

Un altro modo per farlo in Notepad ++ è tutto nella finestra di dialogo Trova / Sostituisci e con regex:

  • Ctrl+ hper visualizzare la finestra di dialogo Trova Sostituisci.

  • Nella Find what:casella di testo includere regex: .*help.*\r?\n(dove \rè facoltativo nel caso in cui il file non abbia terminazioni di riga di Windows).

  • Lascia Replace with:vuota la casella di testo.

  • Assicurati che il pulsante di opzione Espressione regolare nell'area Modalità di ricerca sia selezionato. Quindi fare clic Replace Alle voilà! Tutte le righe contenenti il ​​termine di ricerca helpsono state rimosse.

Sostituisci riga istruzioni in N ++


17
risposta migliore rispetto all'utilizzo della scheda Mark, poiché ciò può essere fatto per "Trova nei file"
Alex

2
Assicurati di sfuggire a caratteri speciali come parentesi con una barra rovesciata.
Noumenon,

4
assicurati di deselezionare ". partite newline"
MagTun

1
Migliore risposta grazie a prestazioni più elevate. Con file di> 1 milione di righe, il metodo dei segnalibri viene esteso al massimo, anche su macchine moderne.
Roland Ettinger,

18

Compito facile con grep:

grep -v help filename

Aggiungi > newFileNameper reindirizzare l'output in un nuovo file.


Aggiornare

Per chiarirlo, il comportamento normale sarà la stampa delle linee sullo schermo. Per reindirizzarlo a un file, è >possibile utilizzarlo. Pertanto, in questo comando:

grep -v help filename > newFileName
  1. grepchiama il grepprogramma, ovviamente
  2. -vè un flag per invertire l'output. Per impostazione predefinita, grepstampa le linee che corrispondono al modello specificato. Con questo flag, stamperà le linee che non corrispondono al modello.
  3. help è il modello da abbinare
  4. filename è il nome del file di input
  5. > reindirizza l'output al seguente elemento
  6. newFileName il nuovo file in cui verrà salvato l'output.

Come avrai notato, non eliminerai le cose nel tuo file. greplo leggerà e un altro file verrà salvato, modificato di conseguenza.


@Kevin Duke: Ahimè! Questo probabilmente significa che non hai grepinstallato. Ad ogni modo ti consiglio di installare GNU grep, funzionerà sicuramente su Windows ed è uno strumento davvero utile.
Sidill

@sidyll sapeva cos'è grep e ha fatto un sacco di output, avrebbe potuto essere perché non ho specificato un file di output
lemon

2
@Kevin Duke: come ho detto prima nella risposta, l'output può essere reindirizzato. Il comportamento standard è la stampa sullo schermo. Per reindirizzare, usi una pipe ( >in questo caso), dando un comando finale digrep -v help filename > outputFileName
sidyll

Grazie, lo proverò sicuramente!
lemon

grep> sed ogni giorno della settimana per trovare sequenze di personaggi
kwikness

13

Puoi farlo usando sed: sed '/help/ d' < inputFile > outputFile


4
@CengizFrostclaw: alla riga di comando su Linux / Mac / qualunque cosa. Se sei su Windows, dovresti installare qualcosa come CygWin e usarlo.
Tikhon Jelvis,

Grazie @TikhonJelvis! E un'ultima domanda, possiamo fare sed 'help /' per eliminare tutte le righe che iniziano (non contengono) con aiuto?
Jeff

3
@CengizFrostclaw: penso che sed '/^help/ d'dovrebbe funzionare. Il ^rappresenta l'inizio della linea.
Tikhon Jelvis,

@jeff PowerShell ha sedegrep
Ooker

cygwin potrebbe non funzionare su Windows con file utf-16. Le utility Cygwin utilizzano UFT-8 per impostazione predefinita. Pochissimi supportano UTF-16. Usa babun babun.github.io . Funziona come un involucro attorno a Cygwin, ma fornisce un sacco di roba fuori dalla scatola.
Sahil Singh,

9

Cerca con un'espressione regolare:

^.*(help).*$

2
E la parte della cancellazione?
Peter Mortensen,

1
@PeterMortensen Trova \n\n, sostituisci con `` (niente)
Leo

6

Se sei su Windows , prova findstr. Non sono necessari strumenti di terze parti:

findstr /V /L "searchstring" inputfile.txt > outputfile.txt

Supporta anche regex's! Basta leggere l'aiuto dello strumentofindstr /? .

PS Se vuoi lavorare con grandi, enormi file (come file di registro da 400 MB) un editor di testo non è molto efficiente in termini di memoria, quindi, come qualcuno ha già sottolineato, gli strumenti da riga di comando sono la strada da percorrere. Ma non c'è grep su Windows, quindi ...

Ho appena eseguito questo su un file di registro da 1 GB e mi ci sono voluti letteralmente 3 secondi.

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.