Warum funktioniert grep Befehl mit * nicht?

... komplette Frage anzeigen

5 Antworten

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

Antwort bewerten Vielen Dank für Deine Bewertung

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. :)

Antwort bewerten Vielen Dank für Deine Bewertung

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 $). 

Antwort bewerten Vielen Dank für Deine Bewertung

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

find . -name "*.c"
Antwort bewerten Vielen Dank für Deine Bewertung

Du musst das Sternchen escapen:

find bla | grep \\*c

cheers | barnim

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?