Hallo,

Rainer Ellinger <[EMAIL PROTECTED]> 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>


-- 
H�ufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject "unsubscribe". Probleme? Mail an [EMAIL PROTECTED] (engl)

Antwort per Email an