Ich muss PHP-Tags hinzufügen, die eine Datei umgeben. Es ist einfach, sie mit anzuhängen
find . -exec echo "?>" >> '{}' \;
aber wie kann ich den tag voranstellen<?php
?
text-processing
sed
Gilles 'SO - hör auf böse zu sein'
quelle
quelle
sed
, und es erlaubt das Hinzufügen eines Backup-Suffix.-i
ist nicht portierbar, die Syntax unterscheidet sich zwischen den Implementierungen und es werden Symlinks unterbrochen. Sie sollten eine Anwendung verwenden, die eigentlich zum Bearbeiten von Dateien entwickelt wurde.Sie könnten einen
AWK
Filter wie diesen verwenden,Wo
PREFIX
ist dein PHP-Präfix?quelle
Ich kann noch keinen Kommentar hinterlassen, aber alles in einem Schritt erledigen:
quelle
Das können Sie mit einem Perl-Einzeiler machen:
Der
-0777
erzwingt das Schlürfen von Dateien, sodass die gesamte Datei als eine Zeile gelesen wird.-p
aktiviert das Looping.-i
Aktiviert die direkte Bearbeitung der Datei.^
gibt den Anfang einer Zeile an.Update: Wie in den Kommentaren angegeben, können Sie festlegen, dass
-i.bak
anstelle von automatisch ein Backup erstellt wird-i
. Dies bietet zusätzliche Sicherheit bei Fehlern in Ihrem Befehl. Das Argument to-i
wird zum Suffix der Sicherung.Wenn Sie eine Reihe von Dateien aktualisieren, können Sie den Befehl mit ausführen
-i.backup${RANDOM}
, prüfen, ob alle Dateien korrekt aktualisiert wurden, und dann alle Dateien mit dieser Erweiterung entfernen.quelle
-i
Flagge ohne Suffix empfehlen , warnen Sie bitte die Leser, dass dies bedeutet, dass Sie keine Sicherung erhalten . Für ein paar Zeichen mehr (-i.bak
) erhalten Sie eine Sicherungskopie, falls Ihr Einzeiler einen Tippfehler enthält. Ein ziemlich einfacher Tippfehler (z. B. das Vergessen der-p
Flagge) kann sonst den ganzen Tag ruinieren.sed
dient zum Bearbeiten von Streams - eine Datei ist kein Stream. Verwenden Sie ein Programm wieed
oder , das für diesen Zweck vorgesehen istex
. Die-i
Option tosed
ist nicht nur nicht portierbar, sondern unterbricht auch alle möglicherweise auftretenden Symlinks, da sie im Wesentlichen gelöscht und neu erstellt werden, was sinnlos ist.quelle
ed
das macht, geben Sie dies in Ihrer Antwort an.Eine Alternative zu dem, was Sie geschrieben haben, um am Ende jeder Datei im Verzeichnis (in
bash
) etwas hinzuzufügen :obwohl ich deinen Einzeiler mag
find
:)quelle
$FNAME
sollte laut$fname
Konvention sein, dass wir Umgebungsvariablen (PAGER, EDITOR, SHELL, ...) und interne Shell-Variablen (BASH_VERSION, RANDOM, ...) großschreiben. Alle anderen Variablennamen sollten mindestens einen Kleinbuchstaben enthalten. Diese Konvention vermeidet das versehentliche Überschreiben von Umgebungsvariablen und internen Variablen.Da ist der einfache Weg
quelle