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

index.php -> index.cgi

Hi,

habe ein Verzeichnis mit vielen Unterverzeichnissen und müsste in allen Dateien den String "index.php" in "index.cgi" ändern.

Mit grep kann ich mir die Stellen schonmal anzeigen lassen:
grep -r "index.php" *

Wie könnte man das am einfachsten machen?


Gruss, Martin
 
Ich habs mal mit einer Datei probiert: die wurde direkt geleert! :-(
Aber das sollte doch eigentlich stimmen, oder?
Code:
sed -e 's/index.php/index.cgi/g' interwiki.sql > interwiki.sql

Gruss, Karl
 
OMG.

Dir ist klar, dass zuerst das ">xx.sql" ausgeführt wird, und dann der sed-Befehl? D.h. zuerst wird sie geleert (das bedeutet ">") und dann wird darein geschrieben.

Besser is das:
Code:
perl -i -ne 's/index\.php/index\.cgi/gso' xxx.sql
 
Bei mir kommen auch leere Dateien heraus, wenn ich
perl -i -ne 's/index\.php/index\.cgi/gso' xxx.sql
verwende.

Ist es denn nicht möglich mit dem sed-Befehl Ersetzungen durchzuführen und das in der selben Datei abzuspeichern? Ich denke darin liegt doch der größte Nutzen dieses Befehls, oder?

Karl
 
ok, dann nimmt man noch "info sed" zur Manpage hinzu und findet:

-i[SUFFIX]'
`--in-place[=SUFFIX]'
This option specifies that files are to be edited in-place. GNU
`sed' does this by creating a temporary file and sending output to
this file rather than to the standard output.(1).

und kommt dann mit etwas Köpfchen sofort zu einem:

Code:
$ sed -i -e 's/index\.php/index\.cgi/g' foo


Achtung: -i ist GNU sed, andere seds müssen das nicht bringen!

sofern nicht mehr mit perl gemacht werden soll, dürfte der Start von sed deutlich schneller gehen ;)
 
Oben