it-swarm.com.de

Wie grep ich Zeilen, die nicht mit "#" oder ";" beginnen?

Ich möchte smb.conf Grep und nur Zeilen sehen, die nicht kommentiert sind.

83
denys
grep "^[^#;]" smb.conf

Das erste ^ Bezieht sich auf den Zeilenanfang, sodass Zeilen mit Kommentaren, die nach dem ersten Zeichen beginnen, nicht ausgeschlossen werden. [^#;] Bedeutet jedes Zeichen, das nicht # Oder ; Ist.

Mit anderen Worten, es werden Zeilen gemeldet, die mit einem anderen Zeichen als # Und ; Beginnen. Es ist nicht dasselbe wie das Melden der Zeilen, die nicht mit # Und ; Beginnen (für die Sie grep -v '^[#;]' Verwenden würden), da es auch leer Zeilen, aber das ist in diesem Fall wahrscheinlich vorzuziehen, da ich bezweifle, dass Sie sich für leere Zeilen interessieren.

Wenn Sie führende Leerzeichen ignorieren möchten, können Sie dies ändern in:

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

oder

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

Oder

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

Vim-Lösung:

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

Ich bin über diese Frage gestolpert, als ich versucht habe, die vim-Lösung selbst zu finden.

4
David Lord

Diese Beispiele könnten für Menschen von Nutzen sein.

[[email protected] 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
[[email protected] tmp]$

Das erste grep-Beispiel schließt Zeilen aus, die mit einer beliebigen Anzahl von Leerzeichen beginnen, gefolgt von einem Hash-Symbol.

[[email protected] 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
[[email protected] tmp]$

Die zweite Option schließt Zeilen aus, die mit einer beliebigen Anzahl von Leerzeichen beginnen, gefolgt von einem Hash-Symbol oder Semikolon.

[[email protected] tmp]$ grep -v '^[[:space:]]*[#;]' whitespacetest

[[email protected] tmp]$
3
JungleMartin

Die Pipe zum Grep in der Antwort von Oliver Nadj kann entfernt werden durch (vorausgesetzt GNU grep oder kompatibel):

grep -v "^\s*[#\;]\|^\s*$" <some_conf_file>
3
Morten Lind
grep -v "^\s*[#;]" any.conf | grep -v "^\s*$"

das ist es, was für mich funktioniert. Ignorieren Sie kommentierte oder leere Zeilen, auch Leerzeichen vor Raute oder Semikolon

2
oliver nadj

Hier habe ich eine bessere bekommen (vorausgesetzt GNU grep oder kompatibel):

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

ausschluss für Zeilen, die mit #;/%< beginnen und in eckigen Klammern stehen, und der zweite Filter nach der Pipe ist \s*$ für Leerzeilen.

0
grep -v '^$\|^\s*#' temp

Das hier ist viel besser, ich habe es von https://stackoverflow.com/questions/17392869/how-to-print-a-file-excluding-comments-and-blank-lines-using-grep- sed

Es wird davon ausgegangen, dass GNU grep oder kompatibel.

0
Tek