Page 1 of 1
Suchen/Ersetzen von der Konsole
Posted: 2003-04-03 09:54
by fuchsmi
Hi!
Ich habe einen Ordner mit ca. 100 html dateinen.
ich möchte nun eine Search/Replace über den gesammten HTML-Code fahren.
Soweit ich weiß kann man das mit einer Zeile von der Konsole aus machen.
Bitte um ein Beispiel!
Danke Michi
Re: Suchen/Ersetzen von der Konsole
Posted: 2003-04-03 10:07
by captaincrunch
Wenn du ncht genau sagst, was du machen willst, kann ich dir nur info sed ans Herz legen
Re: Suchen/Ersetzen von der Konsole
Posted: 2003-04-03 10:25
by fuchsmi
ich möchte in allen dateien im ordern /hugo
den text
max@muster.de
auf
max@muster.com
äamdern.
Re: Suchen/Ersetzen von der Konsole
Posted: 2003-04-03 16:46
by kase
jop, für sowas ist sed dein Freund.´
man sed oder info sed für mehr Infos.
Re: Suchen/Ersetzen von der Konsole
Posted: 2003-04-03 18:33
by jamesb
Re: Suchen/Ersetzen von der Konsole
Posted: 2003-04-13 22:49
by bolle
Ich häng mich mal rein.
Ich würde sowas auch gebrauchen, aber global in einem grossen Verzeichniss mit unterverzeichnissen. In ca. 12000 Dateinen muss der absolute Pfad geändert werden.
Num bräuchte ich mal ein Beispiel, wie ich in allen Dateien und dateien in unterverzeichnissen den pfad /home/www/web2/ nach /home/user/html/ ändere.
Re: Suchen/Ersetzen von der Konsole
Posted: 2003-04-13 22:53
by dodolin
Re: Suchen/Ersetzen von der Konsole
Posted: 2003-04-14 16:09
by bolle
Ich kenn die Linuxfibel...so schlau war ich auch schon.
Das Problem ist, wenn ich mich nach der anleitung richte, kann ich eine Datei damit editieren. Ich hätte aber gerne 12000 Dateien unterschiedlichen Types in verschiedenen Verzeichnissen mit Unterverzeichnissen auch verschiedener Namen in einem rutsch geändert.
Falls das mit sed geht, hätte ich gerne, wie oben schon drum gebeten ein beispiel, nicht irgendwelche Links zu sed manuals.
Falls das so, wie ich das brauche nicht möglich ist, reicht ein einfaches Nein, geht nicht und ich pack den ganzen krempel in ein tar Archiv, lade es runter und editier das nach herkömmlicher Art mit suchen und ersetzen in nem Batchvorgang.
Re: Suchen/Ersetzen von der Konsole
Posted: 2003-04-14 18:30
by majortermi
Dann lass doch einfach eine Schleife laufen:
Code: Select all
for filename in `find /pfad/zum/verzeichnis -type f`
do
sed "/suche/ersetze/" $filename > $filenmae
done
Re: Suchen/Ersetzen von der Konsole
Posted: 2003-04-14 18:55
by cruz-r
STOP !
Wenn die oben beschriebene Schleife so umgesetzt wird, werden alle betroffenen Dateien auf 0 Bytes gesetzt !
Besser:
Code: Select all
for filename in $(find /pfad/zum/verzeichnis -type f)
do
sed 's/suche/ersetze/g' $filename > $$
mv $$ $filename
done
Gruss
cruz-r
P.S. Seh grad, dass die zweite Angabe der Variable einen typo enthält. Wär also zum Glück nichts passiert, ausser einem Haufen Fehlermeldungen (ambiguous redirect)
P.P.S. Nicht wundern, hab noch ein paar Kleinigkeiten verändert
Re: Suchen/Ersetzen von der Konsole
Posted: 2003-04-14 21:10
by dodolin
Das Problem ist, wenn ich mich nach der anleitung richte, kann ich eine Datei damit editieren. Ich hätte aber gerne 12000 Dateien unterschiedlichen Types in verschiedenen Verzeichnissen mit Unterverzeichnissen auch verschiedener Namen in einem rutsch geändert.
Sorry, aber ich dachte, es wäre klar, dass man dann statt
sed 's/altes Muster/neues Muster/' datei
wie im Beispiel einfach die Shellexpansion nutzt und z.B.
sed 's/altes Muster/neues Muster/' *
schreibt, um alle Dateien im aktuellen Verzeichnis zu ändern.
Ebenso könnte man ein geschicktes `ls ...` statts dem Stern einbauen, um noch mehr Dateien zu erwischen. Schliesslich sagt ja auch schon die manpage von sed
Code: Select all
NAME
sed - a Stream EDitor
SYNOPSIS
sed [-n] [-V] [--quiet] [--silent] [--version] [--help]
[-e script] [--expression=script]
[-f script-file] [--file=script-file]
[script-if-no-other-script]
[file...]
Man beachte die Punkte, nach dem "file"...
Diese bedeuten, dass man auch mehrere Dateinnamen angeben kann.
Re: Suchen/Ersetzen von der Konsole
Posted: 2003-04-15 00:38
by jamesb
Code: Select all
find . -type f -name "*.html" -exec perl -p -i -e 's/altessWort/neuessWort/g' {} ;
... und das war's auch schon...
JamesB
Re: Suchen/Ersetzen von der Konsole
Posted: 2003-04-15 00:47
by dodolin
Code: Select all
find . -type f -name "*.html" -exec perl -p -i -e 's/altessWort/neuessWort/g' {} ;
Ah, siehste, der macht auch sed.
find kenne ich nicht so, aber das könnte ich mir dann für meine Lösung ja auch gleich ausborgen...
Code: Select all
sed 's/altes Muster/neues Muster/' `find . -type f -name "*.html"`
:-D
Re: Suchen/Ersetzen von der Konsole
Posted: 2003-10-25 22:52
by webdienstleistungen
Ich möchte im Ordner /var/www/web1/html/startrekvoyager alle Dateien und Dateien in Unterverzeichnissen, die die Zeichenkette /home/www/web2/html/ enthalten mit dieser /var/www/web1/html/ ersetzen.
Ich habe folgendes Script geschrieben:
Code: Select all
#! /bin/sh
for filename in $(find /var/www/web1/html/startrekvoyager -type f)
do
sed 's//home/www/web2/html///var/www/web1/html//' $filename > $$
mv $$ $filename
done
Aber anscheinend stimmt es nicht.
Re: Suchen/Ersetzen von der Konsole
Posted: 2003-10-25 23:22
by captaincrunch
Du markierst die "/" in den Pfadnamen auch nicht beim sed-Aufruf, ist klar, dass das in die Hose geht.
Alternativ könntest du den sed andere Trennzeichen nutzen lassen.
Re: Suchen/Ersetzen von der Konsole
Posted: 2003-10-25 23:28
by webdienstleistungen
Ich habe es jetzt so gemacht:
#! /bin/sh
for filename in $(find /var/www/web1/html/startrekvoyager -type f)
do
sed 's//home/www/web2/html///var/www/web1/html//' $filename > $$
mv $$ $filename
done
Abgesehen davon, dass jetzt sämtliche, tausende von Dateien im Ordner /var/www/web1/html/startrekvoyager 0 Byte groß sind hat alles geklappt.
Vielleicht noch eine Idee?
Re: Suchen/Ersetzen von der Konsole
Posted: 2003-10-25 23:29
by captaincrunch
Arbeite beim find mal mit der Option "size", dann geht auch das
Re: Suchen/Ersetzen von der Konsole
Posted: 2003-10-26 05:06
by oxygen
besser xargs benutzen. Schleifen = evil, das weiß sogar ein BASIC Programmierer.
Re: Suchen/Ersetzen von der Konsole
Posted: 2003-10-26 08:22
by webdienstleistungen
Kannst du mir mal ein Beispiel mit xargs geben?
Re: Suchen/Ersetzen von der Konsole
Posted: 2003-10-26 19:12
by webdienstleistungen
Ich habe es mal mit dem Tipp von
http://www.einzeiler.de probiert:
find . -type f -name "*.*" -exec perl -e 's/home/www/web2/var/www/web1//g' {} ;
Es geht jedoch auch nicht.
Kann mir jemand sagen, was ich falsch mache.