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

Re: viele dateien auf einmal modifizieren



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

In einem Suchmuster können bei sed Teile eingeklammert und im Ersetzen 
Teil mit der \Nummer_des_Auftretens referenziert werden. Das & steht 
für den gesamten Suchmustertreffer.

In obigem Beispiel wird also aus einer Liste mit den ursprünglichen 
Dateinamen eine Liste mit passenden "mv" Kommandos und neuen 
Dateinamnen gebastelt. Diese schaut man sich zuerst (ohne das | sh am 
Ende) an und prüft auf Sinn. Ist alles ok, an die Shell verfüttern.

-- 
rainer@ellinger.de



Reply to: