testparmTun Sie dies besser, da dies auch Standardwerte anzeigt.
F. Hauri
@ F.Hauri Danke. es funktioniert auch. Es werden aber auch einige nicht benötigte (in meinem Fall) Informationen erzeugt, die auch abgegriffen werden sollten ...
Der erste ^bezieht sich auf den Zeilenanfang, sodass Zeilen mit Kommentaren, die nach dem ersten Zeichen beginnen, nicht ausgeschlossen werden. [^#;]bedeutet ein beliebiges Zeichen, das nicht #oder ;.
Mit anderen Worten, es werden Zeilen gemeldet, die mit einem anderen Zeichen als #und beginnen ;. Es ist nicht dasselbe wie das Melden von Zeilen, die nicht mit #und ;(für die Sie verwenden würden grep -v '^[#;]') beginnen, da Leerzeilen ebenfalls ausgeschlossen werden. Dies ist jedoch in diesem Fall wahrscheinlich vorzuziehen, da ich bezweifle, dass Sie sich für Leerzeilen interessieren.
Wenn Sie führende Leerzeichen ignorieren möchten, können Sie Folgendes festlegen:
Ja, oder Sie könnten "Anführungszeichen" verwenden; Das habe ich nachträglich bearbeitet.
Goldlöckchen
7
@denys Du liegst falsch: goldilocks Antwort ist nicht schlimmer als deine. .1 Bitte verwenden Sie keine cat ...| Syntax !. .2 Zum Auspeitschen von Leerzeilen UND Zeilen, die nur Leerzeichen enthalten, könnte u. U. Folgendes verwenden:grep -v "^ *\(#.*\|\)$" < smb.conf
F. Hauri
7
@EmanuelBerg Es ist eine nutzlose Gabel. cat file | grep "blah"implizite zwei binaries durch ein fifo laufen zu lassen , dabei grep "blah" <filegenau das gleiche zu tun und filenatürlich an grep's zu binden STDIN. [bash] nutzlose Katze ist ein voll ausgestattetes Suchthema in jeder Suchmaschine! -> blog.sanctum.geek.nz/useless-use-of-cat ... zum Beispiel
F. Hauri
2
Es macht nicht genau das Gleiche . Es werden 2 Prozesse und eine Pipe erstellt, in der 1 Prozess ausreicht. Lesen Sie den Link in @ F.Hauris letztem Kommentar.
Rahmu
4
Vim-Lösung:
:v/^\s*[#\n]/p
Ich bin über diese Frage gestolpert, als ich versucht habe, die vim-Lösung selbst zu finden.
Dies würde auch Zeilen löschen, die mit Leerzeichen beginnen.
Kusalananda
Wahr. Ich fand das nützlich für Konfigurationsdateien, da Zeilen zwischen Kommentaren ansonsten die Ausgabe füllen. Wenn Sie die Leerzeilen lieber beibehalten möchten, ändern Sie *sie +wie folgt:v/^\s+[#\n]/p
David Lord,
3
Die Pipe, mit der oliver nadj antworten soll, kann entfernt werden durch (vorausgesetzt, GNU grepoder kompatibel):
Diese Beispiele könnten für Menschen von Nutzen sein.
[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]$
Das erste grep-Beispiel schließt Zeilen aus, die mit Leerzeichen beginnen, gefolgt von einem Hash-Symbol.
[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]$
Die zweite Option schließt Zeilen aus, die mit Leerzeichen beginnen, gefolgt von einem Hash-Symbol oder einem Semikolon.
In welcher Art von Conf-Dateien werden <oder /für Kommentare verwendet? Ich kenne viele conf-Dateiformate, bei denen <alles andere als ein Kommentar ist. !wird manchmal wie in X-Ressourcendateien verwendet.
testparm
Tun Sie dies besser, da dies auch Standardwerte anzeigt.Antworten:
Der erste
^
bezieht sich auf den Zeilenanfang, sodass Zeilen mit Kommentaren, die nach dem ersten Zeichen beginnen, nicht ausgeschlossen werden.[^#;]
bedeutet ein beliebiges Zeichen, das nicht#
oder;
.Mit anderen Worten, es werden Zeilen gemeldet, die mit einem anderen Zeichen als
#
und beginnen;
. Es ist nicht dasselbe wie das Melden von Zeilen, die nicht mit#
und;
(für die Sie verwenden würdengrep -v '^[#;]'
) beginnen, da Leerzeilen ebenfalls ausgeschlossen werden. Dies ist jedoch in diesem Fall wahrscheinlich vorzuziehen, da ich bezweifle, dass Sie sich für Leerzeilen interessieren.Wenn Sie führende Leerzeichen ignorieren möchten, können Sie Folgendes festlegen:
oder
Oder
quelle
cat /etc/samba/smb.conf | grep ^[^#\;]
Aber trotzdem Dankecat ...|
Syntax !. .2 Zum Auspeitschen von Leerzeilen UND Zeilen, die nur Leerzeichen enthalten, könnte u. U. Folgendes verwenden:grep -v "^ *\(#.*\|\)$" < smb.conf
cat file | grep "blah"
implizite zwei binaries durch ein fifo laufen zu lassen , dabeigrep "blah" <file
genau das gleiche zu tun undfile
natürlich an grep's zu bindenSTDIN
. [bash] nutzlose Katze ist ein voll ausgestattetes Suchthema in jeder Suchmaschine! -> blog.sanctum.geek.nz/useless-use-of-cat ... zum BeispielVim-Lösung:
Ich bin über diese Frage gestolpert, als ich versucht habe, die vim-Lösung selbst zu finden.
quelle
*
sie+
wie folgt:v/^\s+[#\n]/p
Die Pipe, mit der oliver nadj antworten soll, kann entfernt werden durch (vorausgesetzt, GNU
grep
oder kompatibel):quelle
das funktioniert bei mir Ignorieren Sie kommentierte oder leere Zeilen, auch Leerzeichen vor der Raute oder dem Semikolon
quelle
Diese Beispiele könnten für Menschen von Nutzen sein.
Das erste grep-Beispiel schließt Zeilen aus, die mit Leerzeichen beginnen, gefolgt von einem Hash-Symbol.
Die zweite Option schließt Zeilen aus, die mit Leerzeichen beginnen, gefolgt von einem Hash-Symbol oder einem Semikolon.
quelle
Hier habe ich eine bessere (vorausgesetzt, GNU
grep
oder kompatibel):Ausschluss für Zeilen, die
#;/%<
in eckigen Klammern beginnen und der zweite Filter nach der Pipe\s*$
für Leerzeilen.quelle
<
oder/
für Kommentare verwendet? Ich kenne viele conf-Dateiformate, bei denen<
alles andere als ein Kommentar ist.!
wird manchmal wie in X-Ressourcendateien verwendet.Dies 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 GNU
grep
oder kompatibel vorausgesetzt .quelle
;
einem Kommentar beginnen, der entfernt werden sollte.Mit diesem Befehl werden alle Informationen in der Datei mit Ausnahme von Kommentaren und Leerzeilen überprüft.
quelle
;
Dies sollte Ihnen die Datei ohne die Zeilen anzeigen, die beginnen mit
#
:grep -v "^#" filename
quelle
;
.