Warum funktioniert grep Befehl mit * nicht?

5 Antworten

Das kommt sehr darauf an, welche Syntax du verwenden willst!

Aber völlig davon abgesehen, interpretiert die Shell ein * mit besonderer Bedeutung, du musst den Ausdruck also in Anführungszeichen setzen.

Und außerdem musst du vor den Stern einen Punkt setzen, da das Muster sonst fehlerhaft ist.

Außerdem bin ich mir nicht sicher, was du eigentlich erreichen willst. Möchtest du alle Dateien ausgeben, die mit ".c" enden?

Wenn ja

find | grep '\.c$'

... das findet alle Dateien, mit der Endung ".c", wobei das Dollarzeichen für das Ende steht. :)

Wie es aussieht, hast du regex und vielleicht auch grep falsch verstanden. Ein Sternchen heißt in regex nicht, dass da etwas beliebiges stehen darf, sondern dass das davor stehende Zeichen beliebig oft vorkommen kann/muss. Ein Sternchen als Anfang des regex Ausdrucks ist also gar nicht gültig. "egal was" wäre daher ".*"

Grep durchsucht alle Zeilen anhand der angegebenen regex. Wenn du nur nach ".c" suchst, gibt es dir alle Zeilen aus, die ein C enthalten und mindestens ein Zeichen davor haben. An welcher Stelle in der Zeile diese Zeichen sind ist egal, wenn die regex es nicht vorschreibt (mit ^ oder $). 

Hallo

zB: find | grep c

Das ist schon unsinnig, denn gerade in Verbindung mit find bietet sich exec an statt einer Pipe:

find . -iname "*c" -exec grep -iH '*c' {} \; 2>/dev/null

der * sollte ja bedeuten, dass es egal ist was vorher steht.

Das hängt davon ab welche Syntax Du benutzt. Unter Umständen musst Du auch egrep verwenden (egrep oder grep -E) Der Asterisk steht normalerweise für beliebig viele Zeichen und nicht  für "egal".

Aber erkläre doch mal was das Ziel genau ist, bestimmt findet sich eine relativ einfache Lösung.

Linuxhase

Woher ich das weiß:eigene Erfahrung – Ich benutze seit 2007 Linux und habe LPIC101 und LPIC102

Wenn Du .c-Dateien suchst, kannst Du auch ohne grep suchen:

find . -name "*.c"

Du musst das Sternchen escapen:

find bla | grep \*c

cheers | barnim