Guten Tag Wie kann ich mit "grep" alle Dateien in einem Ordner nach einer bestimmten Zeichenfolge durchsuchen. Jede Datei einzeln ist einfach zu viel Arbeit. -- MfG Luke --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
On 10-Jun-00 Luke wrote:
Guten Tag
Wie kann ich mit "grep" alle Dateien in einem Ordner nach einer bestimmten Zeichenfolge durchsuchen. Jede Datei einzeln ist einfach zu viel Arbeit.
grep versteht Wildcards. ZUmindest grep -l. -- =========================================================== Erhard Schwenk - alias Bitrunner =)B==o) =========================================================== No Spam replies please. --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
* Erhard Schwenk schrieb am 10.Jun.2000:
On 10-Jun-00 Luke wrote:
Wie kann ich mit "grep" alle Dateien in einem Ordner nach einer bestimmten Zeichenfolge durchsuchen. Jede Datei einzeln ist einfach zu viel Arbeit.
grep versteht Wildcards. ZUmindest grep -l.
Nein, grep versteht keine Wildcards. $ grep -l MUSTER '*' grep: *: Datei oder Verzeichnis nicht gefunden Aber die Shell versteht Wildcards. Es ist die Shell, die ein nicht geschützten Wildcard ersetzt. Wenn man $ grep -l MUSTER * eingibt, so ersetzt die _Shell_ den * mit allen Dateinamen, die nicht mit einem . beginnen. Luke (ist das der Vorname?) kann es gleich sein, aber man sollte es wissen. Kann manchmal Verständnisprobleme beseitigen. Außerdem ist wichtig, * funktioniert immer, wenn ein Befehl belibig viele Dateinamen zuläßt, denn nicht der Befehl interpretiert die Wildcards, sondern die Shell. Auch wenn man selber Skripte oder Programme schreibt, braucht man sich nicht um Wildcards zu kümmern. Wichtig ist nur, daß man Dateinamen immer als letztes in belibiger Zahl erwartet. So wie auch grep, da wird als erstes das Suchmuster und dann die Datei erwartet. Umgekehrt könnte es leicht zu Problemen kommen. Bernd -- Bei Fragen an die Liste erst mal nachschauen, ob es diese Frage nicht schon einmal gegeben hat. Ein Archiv der Liste findest Du auf: http://lists.suse.com/archives/suse-linux |Zufallssignatur 7 --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
On Sam, 10 Jun 2000, Bernd Brodesser wrote:
$ grep -l MUSTER '*' grep: *: Datei oder Verzeichnis nicht gefunden
o kann man sich das leicht merken: `fuehre mich aus` - 'schuetze mich vor der shell' nur falls es interessiert...
Aber die Shell versteht Wildcards. Es ist die Shell, die ein nicht geschützten Wildcard ersetzt. Wenn man
$ grep -l MUSTER *
eingibt, so ersetzt die _Shell_ den * mit allen Dateinamen, die nicht mit einem . beginnen. Luke (ist das der Vorname?) kann es gleich sein, aber man sollte es wissen. Kann manchmal Verständnisprobleme beseitigen.
deswegen nimmt man find/xargs ... (siehe beim beispiel) Mit freundlichen Grüßen, Joerg Henner. -- LinuxHaus Stuttgart | Tel.: +49 (7 11) 2 85 19 05 Jörg Henner & Adrian Reyer, Datentechnik GbR | D2: +49 (1 72) 7 35 31 09 | Fax: +49 (7 11) 5 78 06 92 Linux, Netzwerke, Webhosting & Support | http://lihas.de --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
Am Sam, 10 Jun 2000 schrieb Luke:
Wie kann ich mit "grep" alle Dateien in einem Ordner nach einer bestimmten Zeichenfolge durchsuchen. Jede Datei einzeln ist einfach zu viel Arbeit.
Ganz einfach grep "testsausdruck" * und schon werden alle Dateien im Verzeichnis (ich glaube sogar Rekursiv? ) nach dem Inhalt testausdruck durchsucht man grep Daniel --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
Daniel Senger [ Sat, Jun 10, 2000 at 11:36:51AM +0200 ] :
Am Sam, 10 Jun 2000 schrieb Luke:
Wie kann ich mit "grep" alle Dateien in einem Ordner nach einer bestimmten Zeichenfolge durchsuchen. Jede Datei einzeln ist einfach zu viel Arbeit.
Ganz einfach grep "testsausdruck" * und schon werden alle Dateien im Verzeichnis (ich glaube sogar Rekursiv? ) nach dem Inhalt testausdruck durchsucht
bei GNU's grep nicht; grep -r "testausdruck" ./VERZEICHNIS/* würd's tun ..
man grep
Daniel
--------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
-- ){ kabalak->Fatih Demir. email->kabalak@gmx.net. icq->64241161. desktop->GNOME. editor->VIM. }( --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
On Sam, 10 Jun 2000, Daniel Senger wrote:
Wie kann ich mit "grep" alle Dateien in einem Ordner nach einer bestimmten Zeichenfolge durchsuchen. Jede Datei einzeln ist einfach zu viel Arbeit. Ganz einfach grep "testsausdruck" * und schon werden alle Dateien im Verzeichnis (ich glaube sogar Rekursiv? ) nach dem Inhalt testausdruck durchsucht
mit "egrep" kann man übrigens nach "regular expressions" suchen ;) Mit freundlichen Grüßen, Joerg Henner. -- LinuxHaus Stuttgart | Tel.: +49 (7 11) 2 85 19 05 Jörg Henner & Adrian Reyer, Datentechnik GbR | D2: +49 (1 72) 7 35 31 09 | Fax: +49 (7 11) 5 78 06 92 Linux, Netzwerke, Webhosting & Support | http://lihas.de --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
On Sat, 10 Jun 2000, Joerg Henner wrote:
Wie kann ich mit "grep" alle Dateien in einem Ordner nach einer bestimmten Zeichenfolge durchsuchen. Jede Datei einzeln ist einfach zu viel Arbeit. Ganz einfach grep "testsausdruck" * und schon werden alle Dateien im Verzeichnis (ich glaube sogar Rekursiv? ) nach dem Inhalt testausdruck durchsucht
mit "egrep" kann man übrigens nach "regular expressions" suchen ;)
Details dazu stehen in regex(7). -- Anne --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
On Sam, 10 Jun 2000, Anne Forker wrote:
Wie kann ich mit "grep" alle Dateien in einem Ordner nach einer bestimmten Zeichenfolge durchsuchen. Jede Datei einzeln ist einfach zu viel Arbeit. Ganz einfach grep "testsausdruck" * und schon werden alle Dateien im Verzeichnis (ich glaube sogar Rekursiv? ) nach dem Inhalt testausdruck durchsucht mit "egrep" kann man übrigens nach "regular expressions" suchen ;) Details dazu stehen in regex(7).
Passend dazu ein Buch: "Mastering Regular Expressions", O'Reilly-Verlag. Mit freundlichen Grüßen, Joerg Henner. -- LinuxHaus Stuttgart | Tel.: +49 (7 11) 2 85 19 05 Jörg Henner & Adrian Reyer, Datentechnik GbR | D2: +49 (1 72) 7 35 31 09 | Fax: +49 (7 11) 5 78 06 92 Linux, Netzwerke, Webhosting & Support | http://lihas.de --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
* Luke wrote on Sat, 10 Jun 2000:
Wie kann ich mit "grep" alle Dateien in einem Ordner nach einer bestimmten Zeichenfolge durchsuchen. Jede Datei einzeln ist einfach zu viel Arbeit.
man grep grep suchbegriff verzeichnis/* Dirk --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
Hallo Luke, Luke wrote:
Wie kann ich mit "grep" alle Dateien in einem Ordner nach einer bestimmten Zeichenfolge durchsuchen. Jede Datei einzeln ist einfach zu viel Arbeit.
Im einfachsten Falle: ls | xargs grep "muster" Das wird aber bei Ordnern und Binaerdateien mosern bzw. wg. der Binaerdaten piepen oder andere nette Effekte haben... Um das zu umgehen koennte man diverse tests dazwischenschalten und das ganze in eine Schleife packen: for datei in `ls -1`; \ do \ if [ ! -d $datei ]; \ then grep "muster" $datei; \ fi; \ done damit haetten wir schonmal die Verzeichnisse eliminiert [ ] = test, test -d = Verzeichnisse, ! = Negation. hat man z.B. noch gzippte Dateien, kann man statt grep gleich zgrep nehmen. Will man bestimmte Dateiendungen ein- oder ausschliessen haengt man am besten per | ein grep (-v) an das ls, also die erste Zeile waere dann: for datei in `ls | grep -v "\.dvi"`; das wuerde z.B. alle .dvi Dateien ausschliessen. Nur so eine Anregung... Das geht sicher auch noch besser und/oder eleganter ;) Weiteres in man bash, man xargs, man grep, man test usw... CU David -- "We apologise for the inconvenience" ("God's Final Message") --- Douglas Adams (P.S.: I think, I feel good about it, too...) email: David@dhaller.de www: www.dhaller.de --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
On Sam, Jun 10, 2000 at 12:13:10 +0200, David Haller wrote:
for datei in `ls -1`; \ do \ if [ ! -d $datei ]; \ then grep "muster" $datei; \ fi; \ done
Nur eine kleine Anmerkung zur Syntax: for datei in `ls -1` do if [ ! -d $datei ] then grep "muster" $datei fi done Das Symikolon trennt zwei Befehle in der selben Zeile. Der Backslash maskiert das Newline. Die Kombination beider Zeichen ist in einem Script im Allgemeinen überflüssig. Jan --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
Hallo Jan, Jan Trippler wrote:
On Sam, Jun 10, 2000 at 12:13:10 +0200, David Haller wrote:
for datei in `ls -1`; \ do \ if [ ! -d $datei ]; \ then grep "muster" $datei; \ fi; \ done
Nur eine kleine Anmerkung zur Syntax:
Das Symikolon trennt zwei Befehle in der selben Zeile. Der Backslash maskiert das Newline. Die Kombination beider Zeichen ist in einem Script im Allgemeinen überflüssig.
Mal abgesehen davon, dass obige Methode zwar funktioniert aber umstaendlich ist (siehe die anderen Mails - dafuer aber eventuell in einem Script zu komplexeren Dingen auf $datei verwendet werden koennte): Obiges sollte _eine_ Eingabezeile auf der Konsole/xterm darstellen. Daher die ;. Und zur besseren Lesbarkeit und der Laenge wegen hab ich's dann eben mit \ maskiert umgebrochen... Hm. Ich haette vielleich mit 'user@host:~ $ ' anfangen sollen ;) CU David -- Life is sexually transmitted, and terminal... email: David@dhaller.de www: www.dhaller.de --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
Hallo David, * David Haller schrieb am 10.Jun.2000:
Jan Trippler wrote:
Das Symikolon trennt zwei Befehle in der selben Zeile. Der Backslash maskiert das Newline. Die Kombination beider Zeichen ist in einem Script im Allgemeinen überflüssig.
Obiges sollte _eine_ Eingabezeile auf der Konsole/xterm darstellen. Daher die ;. Und zur besseren Lesbarkeit und der Laenge wegen hab ich's dann eben mit \ maskiert umgebrochen...
Auch auf der Eingabezeile kannst Du die Returntaste benutzen. Wenn solche Dinge wie if, case oder do gekommen sind, ist der Befehl nicht zu Ende, bevor fi, esac bzw. done gekommen ist. Auch braucht ein ' bzw. " ein schließendes ' bzw. ". Es erscheint als Prompt dann nicht mehr $PS1, der Standardmäßig auf $ seht, bei SuSE aber auf Rechner@user:$PWD $ hochgepept wurde[1], sondern der Prompt $PS2, der Standardmäßig auf > steht. [1] ich habe ihm übrigens auf \W [$?] \$ stehen, daß erreicht man mit einem export PS1="\W [\$?] \\$ " in der /etc/profile.local. Hat den großen Vorteil, daß man immer den Exitstatus des letzten Befehls sieht. Promptcommand funktioniert aber nicht, da man dann immer den Exitstatus des promtcommands hat. Bernd -- Was ist quoten? Quoten ist das Zitieren aus einer mail, der man antwortet. Und wie macht man es richtig? Zitate werden mit "> " gekennzeichnet. Nicht mehr als nötig zitieren. Vor den Abschnitten das Zitat, auf das man sich bezieht, mit einer Zeile Abstand oben und unten. |Zufallssignatur 12 --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
David Haller schrieb in 1,5K (58 Zeilen):
ls | xargs grep "muster"
Das wird aber bei Ordnern und Binaerdateien mosern bzw. wg. der Binaerdaten piepen oder andere nette Effekte haben...
find . -maxdepth 1 -type f -print0 | xargs -0 grep 'MUSTER' -Wolfgang --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
On Sam, 10 Jun 2000, Luke wrote:
Wie kann ich mit "grep" alle Dateien in einem Ordner nach einer bestimmten Zeichenfolge durchsuchen. Jede Datei einzeln ist einfach zu viel Arbeit.
a) 1 Ordner: grep -i "string" * b) rekursiv: find . -type f|xargs grep -i "string" evt. dann noch beim grep "-l" angeben, damit er nur die file-name ausgibt, wo's auch treffer hat... Mit freundlichen Grüßen, Joerg Henner. -- LinuxHaus Stuttgart | Tel.: +49 (7 11) 2 85 19 05 Jörg Henner & Adrian Reyer, Datentechnik GbR | D2: +49 (1 72) 7 35 31 09 | Fax: +49 (7 11) 5 78 06 92 Linux, Netzwerke, Webhosting & Support | http://lihas.de --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
participants (11)
-
aforker@ipfb.net
-
B.Brodesser@online-club.de
-
d.senger@mail.isis.de
-
David@dhaller.de
-
dirk@pirschel.de
-
eschwenk@fto.de
-
Jan.Trippler@t-online.de
-
jhe@lihas.de
-
kabalak@gmx.net
-
weissel@netcologne.de
-
xmail@gmx.li