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
Schau mal da: http://www.einzeiler.de

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.

Code: Select all

's/altessWort/neuessWort/g'
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.