Ok, habe hier die Info bekommen das ich mit find / -type f -exec grep -l "string" {} \; rekursiv in Dateien suchen kann, aber wie kann ich dann in den gefunden Dateien diesen String automatisch duch einen anderen ersetzen? Hintergrund: Will auf unserer Homepage alle Einträge "Firmenname" in "Firmenname Zusatz" aendern. Das sind jede menge Eintraege und die Seite besteht NOCH komplett aus HTML. --- MfG Marcel
Hi Marcel On Thu, Feb 28, 2002 at 02:22:26PM +0100, Marcel Schmedes wrote:
habe hier die Info bekommen das ich mit
find / -type f -exec grep -l "string" {} \;
rekursiv in Dateien suchen kann, aber wie kann ich dann in den gefunden Dateien diesen String automatisch duch einen anderen ersetzen?
du willst das grep -l ... durch sed 's/zuersetzen/neu/' {} \; oder sowas in der Art auswechseln, aber dafür wäre es besser du liest erstmal zumindest die manpage von sed. -- MfG. Falk
Am Don, 28 Feb 2002 schrieb Marcel Schmedes:
Ok, habe hier die Info bekommen das ich mit
find / -type f -exec grep -l "string" {} \;
Das folgende ist eine Zeile, \ maskiert Zeilenumnbruch for i in `find -type f -exec grep -l "string" \{\} \;|xargs echo`;do \ cp $i $i.tmp; sed -e "s/string/string2/g" < $i.tmp > $i; rm -f $i.tmp; done Probier aber die Ersetzung vorher aus, sonst hast Du ein Problem (oder lösch die .tmp Dateien nicht, dann hast Du ne Sicherung) Gruß Christoph -- Christoph Maurer - 52072 Aachen - Tux#194235 mailto:christoph-maurer@gmx.de - http://www.christophmaurer.de Auf der Homepage u.a.: Installation von SuSE 7.0 auf Notebook Acer Travelmate 508 T, Elektrotechnik an der RWTH Aachen
Danke erstmal, aber wenn ich dein Script ausfuehre (Von dem ich glaube ich, wenig Ahnung habe.) Dann bekomme ich immer folgende Error's: cp: invalid option -- t ./rep.sh $1.tmp: ambiguous redirect rm: invalid option -- t Was habe ich falsch gemacht? On Thu, 2002-02-28 at 14:44, Christoph Maurer wrote:
Am Don, 28 Feb 2002 schrieb Marcel Schmedes:
Ok, habe hier die Info bekommen das ich mit
find / -type f -exec grep -l "string" {} \;
Das folgende ist eine Zeile, \ maskiert Zeilenumnbruch
for i in `find -type f -exec grep -l "string" \{\} \;|xargs echo`;do \ cp $i $i.tmp; sed -e "s/string/string2/g" < $i.tmp > $i; rm -f $i.tmp; done
Probier aber die Ersetzung vorher aus, sonst hast Du ein Problem (oder lösch die .tmp Dateien nicht, dann hast Du ne Sicherung)
Gruß
Christoph
-- Christoph Maurer - 52072 Aachen - Tux#194235 mailto:christoph-maurer@gmx.de - http://www.christophmaurer.de Auf der Homepage u.a.: Installation von SuSE 7.0 auf Notebook Acer Travelmate 508 T, Elektrotechnik an der RWTH Aachen
-- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-linux-unsubscribe@suse.com Um eine Liste aller verfügbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-linux-help@suse.com
Am Don, 28 Feb 2002 schrieb Marcel Schmedes:
On Thu, 2002-02-28 at 14:44, Christoph Maurer wrote:
Am Don, 28 Feb 2002 schrieb Marcel Schmedes:
Ok, habe hier die Info bekommen das ich mit
find / -type f -exec grep -l "string" {} \;
Das folgende ist eine Zeile, \ maskiert Zeilenumnbruch
for i in `find -type f -exec grep -l "string" \{\} \;|xargs echo`;do \ cp $i $i.tmp; sed -e "s/string/string2/g" < $i.tmp > $i; rm -f $i.tmp; done
Probier aber die Ersetzung vorher aus, sonst hast Du ein Problem (oder lösch die .tmp Dateien nicht, dann hast Du ne Sicherung) Danke erstmal, aber wenn ich dein Script ausfuehre (Von dem ich glaube ich, wenig Ahnung habe.) Dann bekomme ich immer folgende Error's:
cp: invalid option -- t ./rep.sh $1.tmp: ambiguous redirect
Warum $1.tmp -> muß $i.tmp heißen, außerdem könnte ein evtl. Leerzeichen im Dateinamen Dir Ärger machen, nimm mal überall "$i" und "$i.tmp" vorsichtshalber, ansonsten mal nachsehen, an welchem Dateinamen er scheitert. Evtl. noch ein echo "$i" zur Ausgabe einbauen... also im Auszug ...;do echo "$i";cp "$i" "$i.tmp";... Gruß Christoph -- Christoph Maurer - 52072 Aachen - Tux#194235 mailto:christoph-maurer@gmx.de - http://www.christophmaurer.de Auf der Homepage u.a.: Installation von SuSE 7.0 auf Notebook Acer Travelmate 508 T, Elektrotechnik an der RWTH Aachen
On Thu, 2002-02-28 at 15:25, Marcel Schmedes wrote:
Danke erstmal, aber wenn ich dein Script ausfuehre (Von dem ich glaube ich, wenig Ahnung habe.) Dann bekomme ich immer folgende Error's:
cp: invalid option -- t ./rep.sh $1.tmp: ambiguous redirect rm: invalid option -- t
Was habe ich falsch gemacht?
Das ist eine Zeile. Die hat mich schon oft gerettet: find . -type f -name "*.html" -exec perl -p -i.bak -e 's/altes\sWort/neues\sWort/g' {} \; Findet im aktuellen Verzeichnis und allen Unterverzeichnissen allen Dateien *.html und ersetzt in diesen Dateien "altes Wort" mit "neues Wort". Zusätzlich wird eine *.html.bak Datei angelegt. HTH Volker -- Volker Kroll 4mino AG Chief System Developer Chausseestr. 52 b volker.kroll@4mino.de D-10115 Berlin Tel.: +49-30-2888490-0 Fax.: +49-30-2888490-99
Am Don, 28 Feb 2002 schrieb Volker Kroll:
On Thu, 2002-02-28 at 15:25, Marcel Schmedes wrote:
Danke erstmal, aber wenn ich dein Script ausfuehre (Von dem ich glaube ich, wenig Ahnung habe.) Dann bekomme ich immer folgende Error's:
cp: invalid option -- t ./rep.sh $1.tmp: ambiguous redirect rm: invalid option -- t
Was habe ich falsch gemacht?
Das ist eine Zeile. Die hat mich schon oft gerettet:
find . -type f -name "*.html" -exec perl -p -i.bak -e 's/altes\sWort/neues\sWort/g' {} \;
Schöner als meine Version mit sed, wo man das Problem mit Ein und Ausgabeumleitung hat, ich gebe es zu... Gruß Christoph -- Christoph Maurer - 52072 Aachen - Tux#194235 mailto:christoph-maurer@gmx.de - http://www.christophmaurer.de Auf der Homepage u.a.: Installation von SuSE 7.0 auf Notebook Acer Travelmate 508 T, Elektrotechnik an der RWTH Aachen
On Thu, 2002-02-28 at 15:53, Christoph Maurer wrote:
Am Don, 28 Feb 2002 schrieb Volker Kroll:
find . -type f -name "*.html" -exec perl -p -i.bak -e 's/altes\sWort/neues\sWort/g' {} \;
Schöner als meine Version mit sed, wo man das Problem mit Ein und Ausgabeumleitung hat, ich gebe es zu...
Und ich gebe zu, daß sie nicht von mir ist :-) Wir habe hier so ein kleines Archiv mit Einzeilern, die immer mal wieder hilfreich sind ;-)) V. -- Volker Kroll 4mino AG Chief System Developer Chausseestr. 52 b volker.kroll@4mino.de D-10115 Berlin Tel.: +49-30-2888490-0 Fax.: +49-30-2888490-99
On Thu, 2002-02-28 at 16:49, Volker Kroll wrote:
On Thu, 2002-02-28 at 15:53, Christoph Maurer wrote:
Am Don, 28 Feb 2002 schrieb Volker Kroll:
find . -type f -name "*.html" -exec perl -p -i.bak -e 's/altes\sWort/neues\sWort/g' {} \;
Schöner als meine Version mit sed, wo man das Problem mit Ein und Ausgabeumleitung hat, ich gebe es zu...
Und ich gebe zu, daß sie nicht von mir ist :-) Wir habe hier so ein kleines Archiv mit Einzeilern, die immer mal wieder hilfreich sind ;-))
V.
-- Volker Kroll 4mino AG
Ist vielleicht etwas dreist, aber moechtest du dieses Archiv mit uns teilen? Obriges Beispiel spricht fuer grosse Zauberkraft. :-) Wenn es fuer die Liste zu gross ist waere ich fuer eine PM sehr dankbar. --- MfG Marcel
From: Marcel Schmedes [mailto:smml@cemag.de]
On Thu, 2002-02-28 at 16:49, Volker Kroll wrote:
On Thu, 2002-02-28 at 15:53, Christoph Maurer wrote:
Am Don, 28 Feb 2002 schrieb Volker Kroll:
find . -type f -name "*.html" -exec perl -p -i.bak -e 's/altes\sWort/neues\sWort/g' {} \;
Schöner als meine Version mit sed, wo man das Problem mit Ein und Ausgabeumleitung hat, ich gebe es zu...
Und ich gebe zu, daß sie nicht von mir ist :-) Wir habe hier so ein kleines Archiv mit Einzeilern, die immer mal wieder hilfreich sind ;-))
V.
-- Volker Kroll 4mino AG
Ist vielleicht etwas dreist, aber moechtest du dieses Archiv mit uns teilen? Obriges Beispiel spricht fuer grosse Zauberkraft. :-) Wenn es fuer die Liste zu gross ist waere ich fuer eine PM sehr dankbar.
--- MfG Marcel
Da kann ich mich nur anschließen!! Christian
On Fri, 2002-03-01 at 10:11, Christian Herzyk wrote:
From: Marcel Schmedes [mailto:smml@cemag.de] On Thu, 2002-02-28 at 16:49, Volker Kroll wrote:
Und ich gebe zu, daß sie nicht von mir ist :-) Wir habe hier so ein kleines Archiv mit Einzeilern, die immer mal wieder hilfreich sind ;-)) Ist vielleicht etwas dreist, aber moechtest du dieses Archiv mit uns teilen? Obriges Beispiel spricht fuer grosse Zauberkraft. :-) Wenn es fuer die Liste zu gross ist waere ich fuer eine PM sehr dankbar. Da kann ich mich nur anschließen!!
Ich werde mal schauen. Die Liste ist nicht von mir und ich weiß nicht wie der Urheber das sieht. Wenn würde ich das ja auch gern erweiterbar machen, so in der Art, die Sammlung der besten Einzeiler. Ich werde das am Wochenende mal durchdenken. Gebt mir ein paar Tage Zeit. Gruß Volker -- Volker Kroll 4mino AG Chief System Developer Chausseestr. 52 b volker.kroll@4mino.de D-10115 Berlin Tel.: +49-30-2888490-0 Fax.: +49-30-2888490-99
On Fri, 2002-03-01 at 10:23, Volker Kroll wrote:
On Fri, 2002-03-01 at 10:11, Christian Herzyk wrote:
From: Marcel Schmedes [mailto:smml@cemag.de] On Thu, 2002-02-28 at 16:49, Volker Kroll wrote:
Und ich gebe zu, daß sie nicht von mir ist :-) Wir habe hier so ein kleines Archiv mit Einzeilern, die immer mal wieder hilfreich sind ;-)) Ist vielleicht etwas dreist, aber moechtest du dieses Archiv mit uns teilen? Obriges Beispiel spricht fuer grosse Zauberkraft. :-) Wenn es fuer die Liste zu gross ist waere ich fuer eine PM sehr dankbar. Da kann ich mich nur anschließen!!
Ich werde mal schauen. Die Liste ist nicht von mir und ich weiß nicht wie der Urheber das sieht. Wenn würde ich das ja auch gern erweiterbar machen, so in der Art, die Sammlung der besten Einzeiler. Ich werde das am Wochenende mal durchdenken. Gebt mir ein paar Tage Zeit.
Wohl wissend, daß Attachments in Listen nicht gern gesehen sind, kommen die Einzeiler als Attachment. (is aba auch kein word ;-)) ) Eine Onlinelösung mit Erweiterungen muß leider noch ein wenig warten. Ich hoffe, die Dinger helfen Euch so viel wie mir. Viel Vergnügen Volker -- Volker Kroll 4mino AG Chief System Developer Chausseestr. 52 b volker.kroll@4mino.de D-10115 Berlin Tel.: +49-30-2888490-0 Fax.: +49-30-2888490-99
Am Mon, 04 Mär 2002 schrieb Volker Kroll:
On Fri, 2002-03-01 at 10:23, Volker Kroll wrote:
On Fri, 2002-03-01 at 10:11, Christian Herzyk wrote:
From: Marcel Schmedes [mailto:smml@cemag.de] On Thu, 2002-02-28 at 16:49, Volker Kroll wrote:
Und ich gebe zu, daß sie nicht von mir ist :-) Wir habe hier so ein kleines Archiv mit Einzeilern, die immer mal wieder hilfreich sind ;-)) Ist vielleicht etwas dreist, aber moechtest du dieses Archiv mit uns teilen? Obriges Beispiel spricht fuer grosse Zauberkraft. :-) Wenn es fuer die Liste zu gross ist waere ich fuer eine PM sehr dankbar. Da kann ich mich nur anschließen!!
Ich werde mal schauen. Die Liste ist nicht von mir und ich weiß nicht wie der Urheber das sieht. Wenn würde ich das ja auch gern erweiterbar machen, so in der Art, die Sammlung der besten Einzeiler. Ich werde das am Wochenende mal durchdenken. Gebt mir ein paar Tage Zeit.
Wohl wissend, daß Attachments in Listen nicht gern gesehen sind, kommen die Einzeiler als Attachment. (is aba auch kein word ;-)) )
Sie werden sogar so ungern gesehen, daß sie automatisch abgetrennt werden (im Normalfall ja wünschenswert, hier weniger) Kannst Du sie als text/plain posten? Gruß Christoph -- Christoph Maurer - 52072 Aachen - Tux#194235 mailto:christoph-maurer@gmx.de - http://www.christophmaurer.de Auf der Homepage u.a.: Installation von SuSE 7.0 auf Notebook Acer Travelmate 508 T, Elektrotechnik an der RWTH Aachen
On Mon, 2002-03-04 at 13:51, Christoph Maurer wrote:
Kannst Du sie als text/plain posten?
OK... ;-( Als begrenzte Aktion liegt die Datei unter: http://www.allein-zu-haus.de/einzeiler/ HTH Volker -- Volker Kroll 4mino AG Chief System Developer Chausseestr. 52 b volker.kroll@4mino.de D-10115 Berlin Tel.: +49-30-2888490-0 Fax.: +49-30-2888490-99
On Mon, 2002-03-04 at 14:36, Volker Kroll wrote:
On Mon, 2002-03-04 at 13:51, Christoph Maurer wrote:
Kannst Du sie als text/plain posten?
OK... ;-( Als begrenzte Aktion liegt die Datei unter: http://www.allein-zu-haus.de/einzeiler/
HTH Volker Hallo Volker, erstmal danke fuer deine Muehe, sicherlich hast du einigen einige Arbeit gespart. Noch ne Frage zum Schluss, "Einzeiler des Tages"? Heisst das, dass in gewissen (welche)? Abstaenden neue dazu kommen? Oder just for fun? Darf ich unter Einbehaltung des Hinweises auf H.O.Hahn diese Liste weiterverbreiten?
--- Marcel
On Mon, 2002-03-04 at 15:28, Marcel Schmedes wrote:
OK... ;-( Als begrenzte Aktion liegt die Datei unter: http://www.allein-zu-haus.de/einzeiler/
erstmal danke fuer deine Muehe, sicherlich hast du einigen einige Arbeit gespart. Noch ne Frage zum Schluss, "Einzeiler des Tages"? Heisst das, dass in gewissen (welche)? Abstaenden neue dazu kommen? Oder just for fun?
Die Liste soll erweitert werden. Damit sind einige ehemalige Kollegen von mir derzeit beschäftigt. Wir haben uns aber noch nicht endgültig überlegt, wie wir es machen wollen.
Darf ich unter Einbehaltung des Hinweises auf H.O.Hahn diese Liste weiterverbreiten?
Ja, da die Liste aber verändert werden soll, ist das vielleicht nicht so furchtbar sinnvoll. Da mich jetzt doch sehr viele angemailt haben, werden wir das ganze mal ein wenig forcieren. Die URL, wo sie jetzt liegt ist definitiv nur temporär. Viele Grüße Volker -- Volker Kroll 4mino AG Chief System Developer Chausseestr. 52 b volker.kroll@4mino.de D-10115 Berlin Tel.: +49-30-2888490-0 Fax.: +49-30-2888490-99
Am 28 Feb 2002 16:49:32 +0100 schrieb Volker Kroll
On Thu, 2002-02-28 at 15:53, Christoph Maurer wrote:
Am Don, 28 Feb 2002 schrieb Volker Kroll:
find . -type f -name "*.html" -exec perl -p -i.bak -e 's/altes\sWort/neues\sWort/g' {} \;
Schöner als meine Version mit sed, wo man das Problem mit Ein und Ausgabeumleitung hat, ich gebe es zu...
Und ich gebe zu, daß sie nicht von mir ist :-) Wir habe hier so ein kleines Archiv mit Einzeilern, die immer mal wieder hilfreich sind ;-))
Und gibt's das Archiv auch irgendwo online? Hilft bestimmt auch anderen ;-) Arne
Allerbesten Dank, DU hast mich gerettet! DANKE :-) On Thu, 2002-02-28 at 15:42, Volker Kroll wrote:
On Thu, 2002-02-28 at 15:25, Marcel Schmedes wrote:
Was habe ich falsch gemacht?
Das ist eine Zeile. Die hat mich schon oft gerettet:
find . -type f -name "*.html" -exec perl -p -i.bak -e 's/altes\sWort/neues\sWort/g' {} \;
Findet im aktuellen Verzeichnis und allen Unterverzeichnissen allen Dateien *.html und ersetzt in diesen Dateien "altes Wort" mit "neues Wort". Zusätzlich wird eine *.html.bak Datei angelegt.
HTH Volker -- Volker Kroll 4mino AG Chief System Developer Chausseestr. 52 b volker.kroll@4mino.de D-10115 Berlin Tel.: +49-30-2888490-0 Fax.: +49-30-2888490-99
-- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-linux-unsubscribe@suse.com Um eine Liste aller verfügbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-linux-help@suse.com
Ok, sorry! Hab mich verhackt! :-) Script läuft jetzt, aber es sagt immer: bash: cp command not found Dann gibt er noch die Fehlermeldung das, das .tmp-File nicht da ist aber das liegt ja am nicht gemachten cp. Warum findet er mein cp nicht, wenn ich es im bash eingebe kein Problem. --- MfG Marcel On Thu, 2002-02-28 at 14:44, Christoph Maurer wrote:
Am Don, 28 Feb 2002 schrieb Marcel Schmedes:
Ok, habe hier die Info bekommen das ich mit
find / -type f -exec grep -l "string" {} \;
Das folgende ist eine Zeile, \ maskiert Zeilenumnbruch
for i in `find -type f -exec grep -l "string" \{\} \;|xargs echo`;do \ cp $i $i.tmp; sed -e "s/string/string2/g" < $i.tmp > $i; rm -f $i.tmp; done
Probier aber die Ersetzung vorher aus, sonst hast Du ein Problem (oder lösch die .tmp Dateien nicht, dann hast Du ne Sicherung)
Gruß
Christoph
-- Christoph Maurer - 52072 Aachen - Tux#194235 mailto:christoph-maurer@gmx.de - http://www.christophmaurer.de Auf der Homepage u.a.: Installation von SuSE 7.0 auf Notebook Acer Travelmate 508 T, Elektrotechnik an der RWTH Aachen
-- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-linux-unsubscribe@suse.com Um eine Liste aller verfügbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-linux-help@suse.com
Am Don, 28 Feb 2002 schrieb Marcel Schmedes:
Ok, sorry! Hab mich verhackt! :-) Script läuft jetzt, aber es sagt immer:
bash: cp command not found
Verstehe ich nicht, schreib mal /bin/cp. Den den Zeilenumbruch maskierenden \ hast Du entfernt, ja? Gruß Christoph -- Christoph Maurer - 52072 Aachen - Tux#194235 mailto:christoph-maurer@gmx.de - http://www.christophmaurer.de Auf der Homepage u.a.: Installation von SuSE 7.0 auf Notebook Acer Travelmate 508 T, Elektrotechnik an der RWTH Aachen
Marcel Schmedes wrote:
habe hier die Info bekommen das ich mit
find / -type f -exec grep -l "string" {} \;
rekursiv in Dateien suchen kann, aber wie kann ich dann in den gefunden Dateien diesen String automatisch duch einen anderen ersetzen?
Müßte mit einer Kombination aus find und perl gehen, ungefähr so: find verzeichnis -type f -print0 | xargs -0 perl -pi -e 's/text1/text2/g' (Vorsicht, nicht getestet, besser nochmal in man-Pages nachlesen und an unwichtigen Dateien bzw. Kopien "üben"!) Das xargs hat hier die Aufgabe, alle von find gefundenen Dateinamen als Argumente an den perl-Aufruf zu übergeben. Durch das -print0 und -0 sollte das auch dann klappen, wenn einzelne Dateinamen Sonderzeichen enthalten. Bei den Texten ist ggf. auf Sonderzeichen zu achten, da der zu ersetzende Text als regulärer Ausdruck angegeben werden muß und auch in dem Ersatztext bestimmte Zeichen Sonderbedeutungen haben. Es ist sicherlich sinvoll, mit dem find die Auswahl der Dateien so weit wie möglich (z.B. mit -name "*.html") einzuschränken, um nicht irrtümlich in Binärdateien oder an sonstigen ungeeigneten Stellen herumzupfuschen. Eilert -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Eilert Brinkmann -- Universitaet Bremen -- FB 3, Informatik eilert@informatik.uni-bremen.de - eilert@tzi.org http://www.informatik.uni-bremen.de/~eilert/
participants (7)
-
Arne-Erik Martin
-
Christian Herzyk
-
Christoph Maurer
-
Eilert Brinkmann
-
Falk Sauer
-
Marcel Schmedes
-
Volker Kroll