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.