Shell UNIX : grep-wild card

Ich kann nicht herausfinden, warum der wild-Zeichen * wird unterschiedlich interpretiert, in der folgenden Beispiele mit grep :

find . -type f -name \*

Ergebnisse :

./tgt/etc/test_file.c
./tgt/etc/speleo/test_file.c
./tgt/etc/other_file.c
./src/file.c

Möchte ich zu dem zurückkehren von diesem Befehl die Dateien, die einem Muster entsprechen, mit evtl. ein wildcard -*. Aber :

find . -type f -name \* | grep "tgt/etc/*" # this one works
find . -type f -name \* | grep tgt/etc/* # not this one
find . -type f -name \* | grep tgt/et*/s* # this one works
find . -type f -name \* | grep "tgt/et*/s*" # not this one

Ich würde gerne eine Umsetzung, die funktioniert für beide Fälle. Was sollte ich verwenden ?

  • Sie verstehen, dass * funktioniert anders in regulären Ausdrücken als in dem Dateinamen Platzhalter, richtig?
  • Blick auf die Frage, ich vermute, er nicht 🙂
  • Ich kann etwas fehlt, aber nicht sehen, wie, dass hat nichts mit der Frage zu tun. Das problem ist, wie grep Prozess Argumente, Bedeutung grep file1 file2, übereinstimmen, werden nicht beide file1 und file2.
  • Ja, ich erkannte, diese Frage war komplizierter, nachdem ich diesen Kommentar geschrieben; siehe meine Antwort.
  • Das ist das Problem mit seiner nicht börsennotierten greps, mein Kommentar ist mehr relevant für seine zitiert greps, weil Sie nicht verwenden * richtig.
  • Du hast Recht, habe ich falsch verstanden, die unterschiedliche Nutzungen * zwischen shell als Platzhalter und regexp als Quantifizierer. Oder zumindest habe ich nicht einmal darüber nachdenken. Ihre Antworten erlauben Sie mir, mein problem zu lösen mit einem vollständigen regulären Ausdruck : grep "/tgt et.*/s.*" zum Beispiel. Danke Jungs.

InformationsquelleAutor Arthur Sigma | 2014-02-01
Schreibe einen Kommentar