Hallo Listenleute ! Ich muss in unserm Webserver (Solaris) nach ner Kette aus 4 Zeichen suchen, und zwar auf der ganzen Mühle, weil die 4 Zeichen _überall_ ersetzt werden sollen. Mach ich das nicht am besten mit find ? Oder mit grep ? Extra dafür n Perl-Script is wohl Overkill, obwohl mich das auch interessieren würde. Mit welchem Konsolenbefehl komm ich da am weitesten ? Best wishes, Norman
Norman Reppingen wrote:
Hallo Listenleute !
Ich muss in unserm Webserver (Solaris) nach ner Kette aus 4 Zeichen suchen, und zwar auf der ganzen Mühle, weil die 4 Zeichen _überall_ ersetzt werden sollen. Mach ich das nicht am besten mit find ? Oder mit grep ? Extra dafür n Perl-Script is wohl Overkill, obwohl mich das auch interessieren würde.
Mit welchem Konsolenbefehl komm ich da am weitesten ?
find <verzeichnis> -type f -exec grep <optionen> <pattern>{} \; ? daniel
Am Dienstag, 13. Mär. 2001 um 12:30:41, schrieb Daniel Wolpert
Norman Reppingen wrote:
Hallo Listenleute !
Ich muss in unserm Webserver (Solaris) nach ner Kette aus 4 Zeichen suchen, und zwar auf der ganzen Mühle, weil die 4 Zeichen _überall_ ersetzt werden sollen. Mach ich das nicht am besten mit find ? Oder mit grep ? Extra dafür n Perl-Script is wohl Overkill, obwohl mich das auch interessieren würde.
Mit welchem Konsolenbefehl komm ich da am weitesten ?
find <verzeichnis> -type f -exec grep <optionen> <pattern>{} \;
Hallo Daniel, also wenn es über den kompletten Verzeichnisbaum gehen soll, dann ist das ganze mit "xargs" um einiges schneller. Also so in diesem Fall. find / -type f |xargs --max-procs=0 grep "gesuchter String" >datei Dann hat man alles schön in einer Datei, wo man dann in einem 2.Anlauf alles ersetzen kann. In einem Skript lässt sich das natürlich alles auf einmal machen. CU Michael -- Wenn Ich jetzt noch ein paar bute Krötenpillchen bekomme, dann leg Ich mich ganz brav in das schöne grosse weisse bett da drüben. [WoKo in dag°]
Michael Wagner wrote:
Am Dienstag, 13. Mär. 2001 um 12:30:41, schrieb Daniel Wolpert
Norman Reppingen wrote:
Hallo Listenleute !
Ich muss in unserm Webserver (Solaris) nach ner Kette aus 4 Zeichen suchen, und zwar auf der ganzen Mühle, weil die 4 Zeichen _überall_ ersetzt werden sollen. Mach ich das nicht am besten mit find ? Oder mit grep ? Extra dafür n Perl-Script is wohl Overkill, obwohl mich das auch interessieren würde.
Mit welchem Konsolenbefehl komm ich da am weitesten ?
find <verzeichnis> -type f -exec grep <optionen> <pattern>{} \;
Hallo Daniel,
also wenn es über den kompletten Verzeichnisbaum gehen soll, dann ist das ganze mit "xargs" um einiges schneller.
Oder gar nicht, da einige xargs-Implementierungen und Shells bei langen Zeilen an ihre internen Limits stossen.
Also so in diesem Fall. Es war von Solaris die Rede.
find / -type f |xargs --max-procs=0 grep "gesuchter String" >datei --max-procs ist gnu-xargs proprietär.
Ralf
* Michael Wagner:
Am Dienstag, 13. Mär. 2001 um 12:30:41, schrieb Daniel Wolpert
Norman Reppingen wrote:
Ich muss in unserm Webserver (Solaris) nach ner Kette aus 4 Zeichen suchen, und zwar auf der ganzen Mühle, weil die 4 Zeichen _überall_ ersetzt werden sollen. Mach ich das nicht am besten mit find ? Oder mit grep ? Extra dafür n Perl-Script is wohl Overkill, obwohl mich das auch interessieren würde.
Mit welchem Konsolenbefehl komm ich da am weitesten ?
find <verzeichnis> -type f -exec grep <optionen> <pattern>{} \;
also wenn es über den kompletten Verzeichnisbaum gehen soll, dann ist das ganze mit "xargs" um einiges schneller. Also so in diesem Fall.
find / -type f |xargs --max-procs=0 grep "gesuchter String" >datei
wobei 'find / -type f -print0 | xargs -0 ...' auch die Probleme mit Leerzeichen im Dateinamen vermeidet. Falls das Solaris find und grep das unterstützen. Thorsten -- public class ThorstenJens extends Student { URL hp = new URL("http://www.thojens.de"); String email = new String("thojens@gmx.de"); }
Thorsten Jens wrote:
* Michael Wagner:
Am Dienstag, 13. Mär. 2001 um 12:30:41, schrieb Daniel Wolpert
Norman Reppingen wrote:
Ich muss in unserm Webserver (Solaris) nach ner Kette aus 4 Zeichen suchen,
Mit welchem Konsolenbefehl komm ich da am weitesten ?
find <verzeichnis> -type f -exec grep <optionen> <pattern>{} \;
also wenn es über den kompletten Verzeichnisbaum gehen soll, dann ist das ganze mit "xargs" um einiges schneller. Also so in diesem Fall.
find / -type f |xargs --max-procs=0 grep "gesuchter String" >datei
wobei 'find / -type f -print0 | xargs -0 ...' auch die Probleme mit Leerzeichen im Dateinamen vermeidet. Falls das Solaris find und grep das unterstützen. Tun sie mit hoher Wahrscheinlichkeit nicht.
An find ist so ziemlich alles ausser -type f, -type d, -exec und -print nicht portabel. Bei xargs sind einige der Short-Options halbwegs portabel, alle Long-Options sind es nicht, -0 auch nicht. Gruss Ralf.
Hi ! Michael Wagner schrieb:
find / -type f |xargs --max-procs=0 grep "gesuchter String" >datei
Dann hat man alles schön in einer Datei, wo man dann in einem 2.Anlauf alles ersetzen kann. In einem Skript lässt sich das natürlich alles auf einmal machen.
Ist bestimmt ne gute Lösung, aber die Sun spielt nicht mit. Er sagt: illegal option -- - womit das max-procs wohl ausscheiden dürfte. Wenn man dieses aber weglässt, findet sich nichts von dem was ich suche, wobei aber offenbar gar keine Suche erfolgt (einen kompletten Server umzukrempeln dürfte länger dauern als ne Sekunde). Gibts evt noch nen Weg (Perleinzeiler oder so) ? Cheers, Norman
Hi again ! Daniel Wolpert schrieb:
find <verzeichnis> -type f -exec grep <optionen> <pattern>{} \;
Ich hab ihm folgendes angeboten: find /www/htdocs/ -type f -exec grep "CHUM" | cat >chumsuche.txt da sagt er find: incomplete statement Was bedeuten die geschweiften Klammern {} und \; muss ich da noch was einsetzen ? Beste Wünsche, Norman
On 14 Mar 2001, at 11:32, Norman Reppingen wrote:
Hi again !
Daniel Wolpert schrieb:
find <verzeichnis> -type f -exec grep <optionen> <pattern>{} \;
Ich hab ihm folgendes angeboten:
find /www/htdocs/ -type f -exec grep "CHUM" | cat >chumsuche.txt
da sagt er
find: incomplete statement
Was bedeuten die geschweiften Klammern {} und \; muss ich da noch was einsetzen ?
Hallo Norman, Wie Daniel schon richtig schrieb, muß das Statement heißen: find /www/htdocs/ -type f -exec grep "CHUM" {} \; {} steht für den von find gefundenen Dateinamen, der dann an grep übergeben wird. ; zeigt find an, daß hier das Kommando für exec zu Ende ist \ muß vor das Semikolon, da sonst die aufrufende Shell das Semikolon als Kommandoseparator versteht und nicht an den find als Teil des Paramters übergibt. Das gibt Dir in in allen Dateien (type f) die Zeilen mit dem String CHUM. Was soll das "| cat" dahinter? Der find mit dem grep zusammen gibt Dir keine Dateinamen, sondern partielle Dateiinhalte. Andreas
Hi ! Andreas Kyek schrieb:
Hallo Norman,
Wie Daniel schon richtig schrieb, muß das Statement heißen:
find /www/htdocs/ -type f -exec grep "CHUM" {} \;
{} steht für den von find gefundenen Dateinamen, der dann an grep übergeben wird.
Ach soo...
; zeigt find an, daß hier das Kommando für exec zu Ende ist \ muß vor das Semikolon, da sonst die aufrufende Shell das Semikolon als Kommandoseparator versteht und nicht an den find als Teil des Paramters übergibt.
Gut.
Das gibt Dir in in allen Dateien (type f) die Zeilen mit dem String CHUM.
Es hat erst funktioniert, als ich find . im entsprechenden Pfad ausgeführt habe.
Was soll das "| cat" dahinter? Der find mit dem grep zusammen gibt Dir keine Dateinamen, sondern partielle Dateiinhalte.
Ich wollte nach dem \; die Ausgaben mit cat in eine Datei reinschubsen, um die Sache danach gemütlich auseinanderdröseln zu können. Funzt aber net, die Ausgaben gehen trotzdem auf die Standardausgabe (Konsole). Cheers, Norman
Am Wed, 14 Mar 2001 schrieb Norman Reppingen:
Was soll das "| cat" dahinter? Der find mit dem grep zusammen gibt Dir keine Dateinamen, sondern partielle Dateiinhalte.
im Zweifelsfall hilft hier grep -l, das zeigt die Dateinamen an. -- Erhard Schwenk http://www.fto.de http://www.akkordeonjugend.de
Hi ! Erhard Schwenk schrieb:
im Zweifelsfall hilft hier grep -l, das zeigt die Dateinamen an.
Ah, gute Idee, ich bin momentan bloss am Grübeln, warum ich das Zeug nicht per Pipe an Cat übergeben, und so das Ergebnis in mein Homedirectory schaufeln kann. Ich hab in den Manpages dazu leider keinen Parameter finden können, der das ermöglicht. Cheers, Norman
On 14 Mar 2001, at 15:35, Norman Reppingen wrote:
find /www/htdocs/ -type f -exec grep "CHUM" {} \;
Es hat erst funktioniert, als ich find . im entsprechenden Pfad ausgeführt habe.
Versteh ich nicht. Das geht hier problemlos. Der Unterschied ist, das bei #> find /pfad_was_auch_immer -type f ... die Ausgabe der Dateinamen mit absolutem Pfad erfolgt und ein #> cd /pfad_was_auch_immer && find . -type f ... die Dateinamen mit relativen Pfaden ausgibt.
Was soll das "| cat" dahinter? Der find mit dem grep zusammen gibt Dir keine Dateinamen, sondern partielle Dateiinhalte.
Ich wollte nach dem \; die Ausgaben mit cat in eine Datei reinschubsen, um die Sache danach gemütlich auseinanderdröseln zu können. Funzt aber net, die Ausgaben gehen trotzdem auf die Standardausgabe (Konsole).
Das geht doch einfach mit find . -type f -exec grep xx {} \; > ausgabe das leitet die Ausgabe des ersten Befehls (find mit anschließendem grep) um. Damit hast Du dann alle gefundenen Zeilen in einer Datei. (Bei mir hier geht das allerdings auch mit find . -type f -exec grep xx {} \; | cat > ausgabe. Das Ergebnis ist allerdings das gleiche; der cat macht keinen Sinn hier) Andreas
Hi ! Andreas Kyek schrieb:
Was soll das "| cat" dahinter? Der find mit dem grep zusammen gibt Dir keine Dateinamen, sondern partielle Dateiinhalte.
Ich wollte nach dem \; die Ausgaben mit cat in eine Datei reinschubsen, um die Sache danach gemütlich auseinanderdröseln zu können. Funzt aber net, die Ausgaben gehen trotzdem auf die Standardausgabe (Konsole).
Das geht doch einfach mit find . -type f -exec grep xx {} \; > ausgabe
Ja, dacht ich mir auch, aber das kleine Luder schluckts einfach nicht. Ich hab im zu durchsuchenden VZ-Baum eingetippt: find . -type f -exec grep "CHUM" {} \; > /home/meinheim/meingegreptes.txt und das Teil schickts mir immer noch auf die Standardausgabe, anstele es in meine Datei einzuschieben. Is jetzt _Sun_nenuntergang ? Kann es sein, dass man die Ausgabe mit Sun OS z.T. nicht umbiegen kann ? Cheers, Norman
On 14 Mar 2001, at 16:18, Norman Reppingen wrote:
Das geht doch einfach mit find . -type f -exec grep xx {} \; > ausgabe
Ja, dacht ich mir auch, aber das kleine Luder schluckts einfach nicht.
Ich hab im zu durchsuchenden VZ-Baum eingetippt:
find . -type f -exec grep "CHUM" {} \; > /home/meinheim/meingegreptes.txt
und das Teil schickts mir immer noch auf die Standardausgabe, anstele es in meine Datei einzuschieben. Is jetzt _Sun_nenuntergang ?
Kann es sein, dass man die Ausgabe mit Sun OS z.T. nicht umbiegen kann ?
definitv nein. Ich habe das aller hier im Office auf 'ne Sun E10k ausprobiert und es geht. Immer! OK, gerade noch mal ausprobiert: find . -type f -name \*pl -exec grep print {} \; > xx Das einzige, was der find dann noch auf dem Terminal ausgibt, sind Meldungen auf stderr. (Wenn du z.B. in ein Verzeichnis in dem Baum nichts lesen darfst oder Du zwar das Verzeichnis lesen darfst, aber der grep die Datei nicht lesen darf) Wenn Du mal ganz sicher gehen willst, dann mach doch mal: find . -type f -exec grep "CHUM" {} \; >file1 2>file2 Dann hast Du in file1 deine Ergebnismenge und in file2 deine evtl. Fehlermeldungen. Und erzähl mir nicht, du würdest immer noch was auf dem Bildschirm sehen. DAS GEHT JETZT NICHT MEHR! Andreas PS: Wie wäre es mit einem guten Buch über die Grundlagen der Shell- Programmierung?
Hallo Norman, * Norman Reppingen schrieb am 14 Mar 2001:
Andreas Kyek schrieb:
Was soll das "| cat" dahinter? Der find mit dem grep zusammen gibt Dir keine Dateinamen, sondern partielle Dateiinhalte.
Ich wollte nach dem \; die Ausgaben mit cat in eine Datei reinschubsen,
find ... > datei 2>&1 Wieso das extra cat ? Gruß, Sebastian -- "No worries." - Rincewind Sebastian Helms - mailto:sebastian@helms.sh (PGP available) SuSE-Linux-Mailinglisten-FAQ: http://www.helms.sh/faq/
On Tue, Mar 13, 2001 at 12:10:36PM +0100, Norman Reppingen wrote:
Hallo Listenleute !
Ich muss in unserm Webserver (Solaris) nach ner Kette aus 4 Zeichen suchen, und zwar auf der ganzen Mühle, weil die 4 Zeichen _überall_ ersetzt werden sollen. Mach ich das nicht am besten mit find ? Oder mit grep ? Extra dafür n Perl-Script is wohl Overkill, obwohl mich das auch interessieren würde.
Mit welchem Konsolenbefehl komm ich da am weitesten ?
Best wishes,
Norman
--------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
Hallo, Musst du die Zeichenfolge in den Dateinamen oder in den Dateien selber finden? Oscar -- Oscar Knapp # oknapp@soly.de # http://www.soly.de # registered Linuxuser nr. 183000 ---------------------------------------------------- "He did decide, though, that with more time and a great deal of mental effort, he could probably turn the activity into an acceptable perversion." -- Mick Farren, "When Gravity Fails"
participants (9)
-
Andreas Kyek
-
Daniel Wolpert
-
Erhard Schwenk
-
Michael Wagner
-
Norman Reppingen
-
Oscar Knapp - soly
-
Ralf Corsepius
-
Sebastian Helms
-
Thorsten Jens