2013-03-09 8 views
8

Vorrei stampare il contenuto di un file, ma tutte le righe che iniziano con # Voglio ignorare. Stavo provando alcune cose con grep e awk, ma continuava a stampare l'intero file, o semplicemente stampavo le righe a partire da #. Potrei darmi una spinta nel modo giusto, o un comando grep/awk che stamperebbe anyline nel file che non inizia con #.Linux, Stampa tutte le righe in un file, NON iniziando con

+4

'-v grep "^ #" file.txt' –

+0

http://unix.stackexchange.com/questions/60994/how-to-grep-lines-which-does-not-begin-with-or –

risposta

16

Utilizzare l'opzione -v di grep a negare la condizione:

grep -v '^#' file 
+1

Grazie mille variare! – Dasoren

5

È possibile utilizzare l'operatore di !:

awk '!/^ *#/ { print; }' 

Questo nega il risultato della partita. Ho anche incluso righe che iniziano con spazi e poi #, ma puoi personalizzare la regex come preferisci.

4

Si potrebbe utilizzare grep per escludere tutte le righe che iniziano con # utilizzando l'opzione

grep -v '^#' filename 

-v Se sei un fan di sed:

sed '/^#/d' filename 
+0

Due buoni esempi. Ma, nell'esempio di sed, non hai bisogno della parte '. *' – cmevoli

+0

@cmevoli - sì, il punto è stato preso, poiché la presenza del numero # all'inizio della riga è sufficiente per il comando delete :) – Tuxdude

0

Ciò consentirebbe anche di lasciare fuori le linee con spazi bianchi prima della #:

awk '$1!~/^#/' file 

o

grep -v '^[[:blank:]]*#' file 
0

Qui è il modo in cui grep PCRE,

grep -P '^(?!#)' file 
Problemi correlati