[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: