Lentes, Bernd [08.02.2010 13:25]:
Werner Flamme schrieb:
Eine Leerzeile besteht aus keinem Zeichen. Nur die beiden Positionen Zeilenanfang (^) und Zeilenende ($) existieren.
[^#] ist eine Zeichenklasse. Sie enthält alle Zeichen außer # (siehe Mail von Ralf Arndt).
Nur noch 'mal zur Sicherheit: Sprich: grep [^#] bedeutet _nicht_, "zeige alle Zeilen, die kein # enthalten", _sondern_ "zeige alle Zeilen, die ein anderes Zeichen als # enthalten" ?
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... HTH 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