2012-04-17 19 views
21

Sto provando a rimuovere automaticamente tutte le righe da un file di testo che contiene una lettera "T" che non è immediatamente seguita da una "H". Ho usato grep e ho inviato l'output a un altro file, ma non riesco a trovare la regex magica che mi aiuterà a farlo.Grep Regex: elenca tutte le righe tranne

Non mi interessa usare awk, sed o qualche altro strumento di Linux se grep non è lo strumento giusto da utilizzare.

risposta

51

che dovrebbe farlo:

grep -v 'T[^H]' 

-v: linee di stampa non corrispondono

[^ H]:. Corrisponde a qualsiasi carattere ma H

+2

Entrambe le istanze di '*' non sono necessarie , come grep esegue la scansione di intere linee alla ricerca di una corrispondenza –

+0

Grazie per l'osservazione.Modificato per riflettere questo. – byrondrossos

9

si può fare:

grep -v 'T[^H]' input 

-v è l'opzione inversa partita di grep che non elenca le linee che corrispondono al modello.

Il regex utilizzato è T[^H] che corrisponde a qualsiasi riga che come T seguito da qualsiasi carattere diverso da uno H.

Problemi correlati