Lentes, Bernd [08.02.2010 15:23]:
Werner Flamme schrieb:
grep -v ^[#] sucht Zeilen, die nicht mit einem # beginnen. Dazu gehören Leerzeilen.
grep ^[^#] sucht Zeilen, die mit einem anderen Zeichen als # beginnen. Eine Leerzeile hat aber kein Zeichen, also beginnt sie auch nicht mit einem anderen Zeichen als # :-) Nahezu unentbehrliche Lektüre *seufz* dazu ist <http://www.87871.com/tool/help/Mastering%20Regular%20Expressi ons,%203rd%20Edition/0596528124/toc.html>.
Guck ich mir mal an.
Dann ist das, was Detlef geschrieben hat, nicht richtig ? Zitat: "[^#] findet also alle Zeilen, die entweder mit irgendwas beginnen "^" (daher auch nicht die leeren Zeilen) oder nen "#" enthalten."
Wenn das (wie hier) ^ an erster Stelle einer Zeichenklasse steht, bedeutet es die Negation der Zeichenklasse. Steht es an anderer Stelle der Zeichenklasse, bedeutet es das Zeichen ^. [^#] -> alle Zeichen, die nicht # sind [#^] -> sowohl # als auch ^ dürfen an dieser Stelle vorkommen. Ist keine Stelle angegeben, gilt analog "in dieser Zeile"
^ in einer Zeichenklasse steht nie für den Zeilenanfang, denn der Zeilenanfang ist eine Position und kein Zeichen - und eine Zeichenklasse besteht nun mal aus Zeichen und nicht aus Positionen ;-)
Das findest Du alles bei Mr. Friedl, spätestens nach dem 10. Einschlafen über der Lektüre ;-) Gilt zumindest für die 2. Auflage...
Hallo Werner,
Allmählich lichtet sich der Nebel. Kannst Du mir bitte auf folgende Fragen eine eindeutige Antwort geben ?
1. grep [^#] bedeutet _nicht_, "zeige alle Zeilen, die kein # enthalten", _sondern_ "zeige alle Zeilen, die ein anderes Zeichen als # enthalten" ?
Ja. Das erstere könnte man mit grep -v '#' datei erreichen
2. "[^#] findet also alle Zeilen, die entweder mit irgendwas beginnen "^" (daher auch nicht die leeren Zeilen) oder nen "#" enthalten." Stimmt insofern nicht, als daß das ^ hier nichts mit dem Zeilenanfang zu tun hat.
Der Ausdruck hat mit "Beginnen" nichts zu tun. Zeilen, die mit einem # beginnen, findest Du mit grep '^#' datei Alle Zeilen beginnen mit irgendwas, aber manche enthalten auch irgendwas ;-) Zeige alle Zeilen, die mit '#' beginnen: grep '^#' datei (Zeilenbeginn, unmittelbar gefolgt von '#') Zeige alle Zeilen, die nicht mit '#' beginnen grep ^[^#]' datei (Zeilenbeginn, unmittelbar gefolgt von einem Zeichen, das kein '#' ist - und ein Zeilenende ist kein Zeichen, es sei denn, man gibt es durch eine Option so an *seufz*) Zeige alle Zeilen, die ein '#' enthalten grep '#' datei Zeige alle Zeilen, die kein '#' enthalten grep -v '#' datei
Frustierend, wenn in einem Buch zur LPI-Vorbereitung drin steht (das auch noch 35,-- € kostet), daß "grep -v [#] Datei" und "grep [^#] Datei" das gleiche seien. Ich hatte bei dem Buch von Harald Maaßen schon an zwei anderen Stellen den Eindruck, das da was nicht stimmt.
Harald Maaßen kenne ich nicht. Ich bevorzuge die Bücher von Peer Heinlein zu LPIC-1 und von Anke Börnig für LPIC-2, etwa https://www.opensourcepress.de/professional_ref.html. Ich habe den LPIC-1-Vorbereitungs-Kurs bei Peer himself besucht ;-) grep -v [#] datei lässt schon die Frage entstehen, was die eckigen Klammern da machen. Eine Zeichenklasse aus einem Zeichen ist was? Hm. Und ich sach' noch, lies den Friedl... :-) Gruß Werner -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org