2012-04-05 2 views
0

In einigen PHP-Dateien möchte ich "?>\s\t\n\EOF" ersetzen. Ich teste diese für die Suche alle Dateien, in denen dieses Problem mit aufgetreten:So ersetzen Sie einige Zeichen und EOF in Datei

ack "\?\>[\s\n\t]+\z" 

Ich nehme Ergebnis, aber ich will das nur durch ?>EOF ersetzen. ich einen anderen Befehl testen mit "sed":

sed 's/?>[\n\t\s]+\z/?>/' 

Haben Sie ein paar Tipps?

Beispiel:

?> 
+0

Sie müssen erklären, was Sie versuchen, klarer zu machen. Ich vermute, dass Sie nach der letzten Zeile einer Datei, die den Close-Marker für PHP enthält, versuchen, nachgestellte Leerzeichen, Tabulatoren und Zeilenumbrüche zu entfernen, aber es ist nicht klar. Können Sie ein Beispiel für die Eingabedateien, die Sie haben (vielleicht 4 Zeilen in einem minimalen Beispiel) und die gewünschte Ausgabe zeigen? Wie für Tipps, die meisten Versionen von "sed" erkennen Perl reguläre Ausdrücke standardmäßig nicht; Einige haben sie als eine Option. –

+0

Was soll das heißen? Was \ z? –

+0

\ s ist Leerraum, \ z ist EOF – Herve

Antwort

1

ack ist Perl basiert und sed nicht erkennt Dinge wie \ z. Verwenden Sie Perl:

perl -pe 's/\?\>[\s\n\t]+\z/?>\n/' 

Auch ist \ z nicht EOF, sondern lediglich von String beenden, so \ z wird das Ende jeder Zeile entsprechen. Wenn dies nur am Ende der Datei übereinstimmen soll, müssen Sie etwas anderes als \ z verwenden.

+0

ok danke, ich setze meine Forschung fort – Herve