Archiv verlassen und diese Seite im Standarddesign anzeigen : grep mehrmal vorkommen
klaus_harrer
21-12-2004, 16:45
Hallo
Ich versuche schon sei eine Stunde die Anzahl der Punkte in einen abzufragen
basename /home/klausharrer/vide-linux-2.00.tar.gz | grep -c ".\{5\}"
Wird einen 1 b.z.w ein vorhanden sein von fünf Punkten. Es sins aber nur drei.
Woran liegt das?
Liegt es an der Maskierung des Punktes?
MfG
Klaus
Das es nicht funktioniert liegt an mehreren Sachen:
Die Option -c zählt nur die Anzahl an Zeilen, nicht an Auftreten
Der einzelne "." steht für ein beliebiges Zeichen, d.h. Du suchst im Endeffekt nach mindestens 5 beliebigen Zeichen. Nur nach dem Punkt zusuchen wäre demnach "\."
Du möchtest natürlich nicht 5 Punkte direkt hintereinander, also einfach nur "\."
Pingu
klaus_harrer
21-12-2004, 17:49
Hallo
Ich denke Paramter -c geht in Ordnung da es immer eine Zeile gibt. Und nur gefragt wird ob das Muster in einer Zeile enthalten sind
Doch
basename /home/klausharrer/vide-linux-2.00.tar.gz | grep -c "\.\{2\}"
funtioniert genauso nicht.
MfG
Klaus
Ich denke Paramter -c geht in Ordnung da es immer eine Zeile gibt. Und nur gefragt wird ob das Muster in einer Zeile enthalten sind
Nee. grep zählt die Anzahl der Zeilen nicht das Auftreten innerhalb einer Zeile, z.B. ls -a | grep -c "\." zählt die Files und Directories, die einen Punkt im Namen haben.
Doch
basename /home/klausharrer/vide-linux-2.00.tar.gz | grep -c "\.\{2\}"
funtioniert genauso nicht.
Das würde jetzt genau nach zwei Punkten hintereinander suchen, also z.b. "dasistmein.schoenes..File" Das würde grep mit Deiner regex finden. Dagegen das File "dasistmein.schoenes.File" würde grep nicht finden.
Du kannst das was Du willst nicht mit grep machen. Allerdings weiß ich auch keine andere Lösung.
Pingu
Wenn ich es richtig verstanden habe, möchtest Du die Anzahl der Punkt in einem Dateinamen überprüfen.
Versuchs mal damit:
basename /home/klausharrer/vide-linux-2.00.tar.gz | sed -e 's/[^.]//g' | wc -c
Das liefert die Anzahl an Punkten. Die kannst Du dann gegenprüfen und entsprechend verarbeiten.
klaus_harrer
22-12-2004, 12:35
Hallo phate
He, sehr gut das mit sed.
Das Problem ist das .wc -c vier Charakter findet.
MfG
Klaus
wc -c zählt noch das newline mit. Also immer -1:
expr $(basename...wc -c) - 1
Hallo zusammen,
Wie wärs damit?
basename /home/klausharrer/vide-linux-2.00.tar.gz | sed s/[^.]/" "/g | wc -w
HTH
klaus_harrer
22-12-2004, 15:41
Hallo maceis,Joghurt
Funktioniert.
Danke.
MfG
Klaus
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.