PDA

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

Pingu
21-12-2004, 17:23
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

Pingu
21-12-2004, 18:02
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

phate
22-12-2004, 12:22
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

Joghurt
22-12-2004, 14:13
wc -c zählt noch das newline mit. Also immer -1:
expr $(basename...wc -c) - 1

maceis
22-12-2004, 15:23
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