• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

viele files mit sed aendern.

Grafula

Newbie
Hi,

ich moechte alle html files in allen directories unter ./ nach einem bestimmten Wort durchsuchen und dieses Word durch ein anderes ersetzen.

Habe gedacht dies mit folgendem Script bewergstelligen zu koennen, aber irgendwo klappts nicht.

Das script laeuft ohne Fehlermeldung ab, aber die files werden nicht geaendert.

Dankbar fuer Eure Hilfe.

Code:
#!/bin/bash

a="searchtext"
b="replacetext"
for x in `find . -name '*.html'`
do
   sed 's/$a/$b/gi' $x > $x.new
   cat $x.new >$x
   rm -f $x.new
done
 

abgdf

Guru
Hi,

ich glaube, Deine sed-Zeile braucht doppelte Anführungszeichen:
Code:
sed "s/$a/$b/gi" $x > $x.new

Quelle:

http://www.openaddict.com/documents/abs-guide/x19316.html

Viele Grüße
 
OP
Grafula

Grafula

Newbie
Au man, [Hand vor den Kopf schlagend]

Klasse, vielen Dank, Du hast den Fehler sofort erkannt; ich waere in Stunden nicht drauf gekommen...
 
Bei den einfachen Anführungszeichen werden die
Variablen nicht ersetzt.

#!/bin/bash

a="searchtext"
b="replacetext"

find . -name "*.html" -type f -exec sed -i "s#$a#$b#gi" {} \;

Vorteile von meinem Beispiel:
- / kann mit ersetzt werden ( # sollte dann nicht im search/replace vorkommen )

Geht nur bei neueren sed: -i => replace in der Datei selber

Aber auch: wenn in search/replace Leerzeichen vorkommen ist
dein Schleife besser.

Viele Grüße,

Haveniceday
 
Oben