Re: viele dateien auf einmal modifizieren
Hallo,
Rainer Ellinger <rainer@ellinger.de> schrieb am Sat, 12 Oct 2002
13:17:00 +0200::
> Hans Gerber schrieb:
> > Verstehe ich richtig, dass bei 'sed' immer ganze Zeilen ersetzt
> > werden nicht einzelne strings ?
>
> Nein, sed arbeitet zeilenweise. Innerhalb der Zeile ist Beliebiges
> möglich.
>
> > wie kriege ich denn jetzt ..."first"... in ..."last"... ?
>
> Mit Klammerungen. Ein praktisches Beispiel:
>
> Dateien des Musters datei-AB01.htm sollen nach liste-01-AB.html
> umbenannt werden.
>
> ls -d *.htm | \
> sed 's/datei-\(..\)\([0-9]*\)\.htm/mv & liste-\2-\1.html/' | sh
>
> Vereinfacht (ohne die lästigen Escapes) passiert folgendes:
> Suche: datei-(..)([0-9]*).htm und ersetze durch: mv & liste-\2-\1.html
Mein 1. Problem scheint etwas mit den escapes zu tun zu haben.
----schnipp---
#!/bin/bash
foo1="DOCUMENT_ROOT_old"
foo2="DOCUMENT_ROOT_new"
for f in index.php
do
if grep "$foo1" "$f"
then
mv "$f" "$f.bak"
if sed -e 's/'"$foo1"'/'"$foo2"'/g' "$f.bak" >"$f"
then echo "Treffer"
else cp "$f.bak" "$f"
fi
else
echo "none"
fi
done
----schnapp----
So wie oben geht es jetzt, aber sobald ich das '$' Sonderzeichen in foo1
mit reinnehme ist Ende: foo1=$DOCUMENT_ROOT_old. Dann schnmeisst das
Skript die Fehlermeldung:
"sed: -e expression #1, char 5: No previous regular expression".
Dich es in meinem konkreten Fall nicht benötige, ist es nicht so
wichtig, aber trotzdem würde mich mal interessieren, wie ich das lösen
kann.
2. Problem
Die betroffenen Dateien index.php sind in bis zu dreifacher Tiefe in
verschiedenen Unterverzeichnissen. Mit find ./ -name index.php kann ich
in der shell wunderbar alle Dateien finden, aber wie kriege ich das in
das obige Skript eingebaut. was ich erreichen möchte ist:
for all in find ./ -name index.php mache ersetzung
Ciao,
Hans
<der soeben ein gebrauchtes shell-programmierung buch bestellt hat>
Reply to: