On 06-Mar-08, Ekkard Gerlach wrote:
- Uwe Diederich schrieb:
Versuch einmal grep:
grep -v "****" <Datei> | while ....
gibt alle Zeilen, die die Zeichenkette nicht enthalten aus.
Ich habe das mit der pipe übersehen. Also dann etwa so:
... | grep -v "****"
Letztlich brauche ich eine Möglichkeit eine Datei, die aus einer pipe kommt, mit read einzulesen und die Zeilen mit ****..... sollen einfach ignoriert/gelöscht werden:
... | grep -v '^****' Erklärung: ° grep -v "****" grep erhält "****", das bedeutet "beliebig viele `*', gefolgt von beliebig vielen `*'". Das passt auf beliebig viele "*" irgendwo auf der Zeile. Dabei ist grep noch "gnädig", denn eigentlich sind der erste und der dritte "*" ein Syntax-Fehler, da "*" der "beliebig viele" Operator ist, nur daß davor nichts kommt was beliebig oft wiederholt werden könnte. Nur grep sagt sich: da meinte der Mensch wohl "*" (den normalen Stern), und nimmt den einfach. Der zweite und der vierte "*" kommen dann nach einem "ich nehm mal an der meint *"-Stern, damit haben die was zum wiederholen und tun das auch. Also steht da eigentlich '****'. Dies passt auf Zeilen wie "ab cd efghi askjld lkasjd ********************** askldjk" "**************** aklsdaj lsakjdlaskjda" "akjsdjskad skd a *" "abc" "" usw. Also auch auf Zeilen die gar keine Sternchen enthalten. Grund: "**" bedeutet "beliebig viele Sternchen", inklusive keine Sternchen. Also wenigstens null Sternchen, dann nochmal null Sternchen. Das paßt also auf beliebige Zeilen, da jede Zeile mindestens null Sternchen enthält. Dies sortiert keine Zeilen aus, bringt also nichts. ° grep -v '^****' Dies liest sich '^****' ^~~~~~~~~______ / \ Anfang der Zeile vier normale ("literale") Sternchen Also vier Sternchen am Zeilenanfang. Das Ganze steht in einfachen Anführungszeichen, damit die Shell nicht die "" rausnimmt bevor das Ganze an grep weitergereicht wird. (Es empfiehlt sich, alle regulären Ausdrücke in einfache Anführungszeichen zu stellen, damit die Shell da nichts dran ändert.) Dies paßt auf Zeilen mit vier Sternchen am Zeilenanfang. (Danach können natürlich weitere Sternchen kommen.) Dies passt auf Zeilen wie "**** asjkldjl askjd sdkjflk ksjdklqk" "********* jdsfklj ljkslejflskjf lske" usw. Es passt nicht auf "klasdjlak lkasd **** klasdjl kljasldk" "** klajsl aslkdjlasj" "ajklsdlaj " "" und schmeisst damit nur die Zeilen raus die mit mindestens vier Sternchen anfangen. Gruß, -- Olaf Dabrunz (od/odabrunz), SUSE Linux Products GmbH, Nürnberg -- 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