Come grep linee che non iniziano con "#" o ";"?


78

Voglio grep smb.confe vedere solo le righe che non sono commentate.


1
testparmfarlo meglio poiché anche questo visualizza valori predefiniti.
F. Hauri,

@ F.Hauri Grazie. funziona anche. Ma produce anche alcune informazioni non necessarie (nel mio caso), che dovrebbero anche essere prese in giro ...
nega l'


Un altro modo attraverso PCRE grep stackoverflow.com/a/45917459/3297613
Avinash Raj,

Risposte:


125
grep "^[^#;]" smb.conf

Il primo si ^riferisce all'inizio della riga, quindi le righe con commenti che iniziano dopo il primo carattere non saranno escluse. [^#;]indica qualsiasi personaggio che non lo sia #o ;.

In altre parole, riporta le righe che iniziano con qualsiasi carattere diverso da #e ;. Non è lo stesso che riportare le righe che non iniziano con ( #e ;per le quali useresti grep -v '^[#;]') in quanto esclude anche le righe vuote , ma probabilmente è preferibile in questo caso poiché dubito che ti interessi delle righe vuote.

Se si desidera ignorare i caratteri vuoti iniziali, è possibile modificarlo in:

grep '^[[:blank:]]*[^[:blank:]#;]' smb.conf

o

grep -vxE '[[:blank:]]*([#;].*)?' smb.conf

O

awk '$1 ~ /^[^;#]/' smb.conf

la risposta giusta è: cat /etc/samba/smb.conf | grep ^[^#\;]Ma grazie
nega l'

Sì, oppure potresti usare "virgolette"; L'ho modificato in seguito.
Riccioli d'oro

7
@denys Ti sbagli: la risposta di goldilocks non è peggiore della tua. .1 Evitare di utilizzare la cat ...| sintassi !. .2 Per montare linee vuote E linee contenenti solo spazio, magari con commenti U potresti usare questo:grep -v "^ *\(#.*\|\)$" < smb.conf
F. Hauri,

7
@EmanuelBerg È una forcella inutile. cat file | grep "blah"implica che esegua due binari attraverso un fifo , mentre grep "blah" <filefa esattamente lo stesso e si lega file naturalmente a grep's STDIN. [bash] inutile gatto è un argomento completo di ricerca attraverso qualsiasi motore di ricerca! -> blog.sanctum.geek.nz/useless-use-of-cat ... per esempio
F. Hauri

2
Non fa esattamente lo stesso . Crea 2 processi e una pipe in cui 1 processo è sufficiente. Leggi il link fornito nell'ultimo commento di @ F.Hauri.
Rahmu,

4

Soluzione Vim:

:v/^\s*[#\n]/p

Mi sono imbattuto in questa domanda quando ho cercato di trovare la soluzione vim da solo.


1
Ciò eliminerebbe anche le righe che iniziano con gli spazi.
Kusalananda

Vero. Ho trovato utile per i file di configurazione come righe tra i commenti altrimenti riempire l'output. Se preferisci mantenere le righe vuote, cambia *in +così:v/^\s+[#\n]/p
David Lord

3

La pipe da grep nella risposta di oliver nadj può essere eliminata (assumendo GNU grepo compatibile):

grep -v "^\s*[#\;]\|^\s*$" <some_conf_file>

Secondo grep i @ nadj sembra inutile, la risposta di @ goldilocks è stata più che soddisfacente.
Archemar,

1
Sono d'accordo che la risposta di goldilocks fosse corretta. Tuttavia, ho anche ritenuto utile non mostrare righe vuote.
Morten Lind,

2
grep -v "^\s*[#;]" any.conf | grep -v "^\s*$"

questo è ciò che funziona per me. ignora le righe commentate o vuote, anche gli spazi bianchi prima del segno di hash o del punto e virgola


2

Questi esempi potrebbero essere utili alle persone.

[user@host tmp]$ cat whitespacetest
# Line 1 is a comment with hash symbol as first char

# Line 2 is a comment with hash symbol as second char
  # Line 3 is a comment with hash symbol as third char
        # Line 4 is a comment with tab first, then hash
        ; Line 5 is a comment with tab first, then semicolon. Comment char is ;
; Line 6 is a comment with semicolon symbol as first char
[user@host tmp]$

Il primo esempio grep esclude le linee che iniziano con qualsiasi quantità di spazio bianco seguita da un simbolo di hash.

[user@host tmp]$ grep -v '^[[:space:]]*#' whitespacetest

        ; Line 5 is a comment with tab first, then semicolon. Comment char is ;
; Line 6 is a comment with semicolon symbol as first char
[user@host tmp]$

Il secondo esclude le righe che iniziano con qualsiasi quantità di spazio bianco seguita da un simbolo di hash o punto e virgola.

[user@host tmp]$ grep -v '^[[:space:]]*[#;]' whitespacetest

[user@host tmp]$

0

Qui ne ho uno migliore (supponendo GNU grepo compatibile):

grep -v '^[#;/%<]\|^\s*$' anyfile.conf

esclude le righe che iniziano con le #;/%<parentesi quadre e il secondo filtro dopo pipe è \s*$per le righe vuote.


2
In quale tipo di file conf sono <o /utilizzati per i commenti? Conosco molti formati di file conf dove <è tutto tranne un commento. !viene talvolta utilizzato come nei file di risorse X.
Stéphane Chazelas,


-2
egrep -v "^#|^$" anyfile.txt

questo comando serve per grep tutte le informazioni nel file esclusi commenti e righe vuote.


2
Si noti che smb.conf commenta anche con;
Jeff Schaller

-3

Questo dovrebbe visualizzare il file senza quelle righe che iniziano con #: grep -v "^#" filename


Questo non fa nulla con le linee che iniziano ;.
Kusalananda
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.