Suchen/Ersetzen von der Konsole
Suchen/Ersetzen von der Konsole
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
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
-
captaincrunch
- Userprojekt

- Posts: 7066
- Joined: 2002-10-09 14:30
- Location: Dorsten
- Contact:
Re: Suchen/Ersetzen von der Konsole
Wenn du ncht genau sagst, was du machen willst, kann ich dir nur info sed ans Herz legen
DebianHowTo
echo "[q]sa[ln0=aln256%Pln256/snlbx]sb729901041524823122snlbxq"|dc
echo "[q]sa[ln0=aln256%Pln256/snlbx]sb729901041524823122snlbxq"|dc
Re: Suchen/Ersetzen von der Konsole
jop, für sowas ist sed dein Freund.´
man sed oder info sed für mehr Infos.
man sed oder info sed für mehr Infos.
Re: Suchen/Ersetzen von der Konsole
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.
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
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.
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.
-
majortermi
- Userprojekt

- Posts: 916
- Joined: 2002-06-17 16:09
Re: Suchen/Ersetzen von der Konsole
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
Erst nachlesen, dann nachdenken, dann nachfragen... :)
Warum man sich an diese Reihenfolge halten sollte...
Warum man sich an diese Reihenfolge halten sollte...
Re: Suchen/Ersetzen von der Konsole
STOP !
Wenn die oben beschriebene Schleife so umgesetzt wird, werden alle betroffenen Dateien auf 0 Bytes gesetzt !
Besser:
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
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
donecruz-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
Sorry, aber ich dachte, es wäre klar, dass man dann stattDas 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.
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...]
Diese bedeuten, dass man auch mehrere Dateinnamen angeben kann.
Re: Suchen/Ersetzen von der Konsole
Code: Select all
find . -type f -name "*.html" -exec perl -p -i -e 's/altessWort/neuessWort/g' {} ;JamesB
Re: Suchen/Ersetzen von der Konsole
Ah, siehste, der macht auch sed.Code: Select all
find . -type f -name "*.html" -exec perl -p -i -e '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
's/altessWort/neuessWort/g'
Code: Select all
sed 's/altes Muster/neues Muster/' `find . -type f -name "*.html"`-
webdienstleistungen
- Posts: 59
- Joined: 2003-01-04 21:42
- Location: Dreieich
- Contact:
Re: Suchen/Ersetzen von der Konsole
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:
Aber anscheinend stimmt es nicht.
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
-
captaincrunch
- Userprojekt

- Posts: 7066
- Joined: 2002-10-09 14:30
- Location: Dorsten
- Contact:
Re: Suchen/Ersetzen von der Konsole
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.
Alternativ könntest du den sed andere Trennzeichen nutzen lassen.
DebianHowTo
echo "[q]sa[ln0=aln256%Pln256/snlbx]sb729901041524823122snlbxq"|dc
echo "[q]sa[ln0=aln256%Pln256/snlbx]sb729901041524823122snlbxq"|dc
-
webdienstleistungen
- Posts: 59
- Joined: 2003-01-04 21:42
- Location: Dreieich
- Contact:
Re: Suchen/Ersetzen von der Konsole
Ich habe es jetzt so gemacht:
Vielleicht noch eine Idee?
Abgesehen davon, dass jetzt sämtliche, tausende von Dateien im Ordner /var/www/web1/html/startrekvoyager 0 Byte groß sind hat alles geklappt.#! /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
Vielleicht noch eine Idee?
-
captaincrunch
- Userprojekt

- Posts: 7066
- Joined: 2002-10-09 14:30
- Location: Dorsten
- Contact:
Re: Suchen/Ersetzen von der Konsole
Arbeite beim find mal mit der Option "size", dann geht auch das
DebianHowTo
echo "[q]sa[ln0=aln256%Pln256/snlbx]sb729901041524823122snlbxq"|dc
echo "[q]sa[ln0=aln256%Pln256/snlbx]sb729901041524823122snlbxq"|dc
Re: Suchen/Ersetzen von der Konsole
besser xargs benutzen. Schleifen = evil, das weiß sogar ein BASIC Programmierer.
-
webdienstleistungen
- Posts: 59
- Joined: 2003-01-04 21:42
- Location: Dreieich
- Contact:
Re: Suchen/Ersetzen von der Konsole
Kannst du mir mal ein Beispiel mit xargs geben?
-
webdienstleistungen
- Posts: 59
- Joined: 2003-01-04 21:42
- Location: Dreieich
- Contact:
Re: Suchen/Ersetzen von der Konsole
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.
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.