Ich habe einige wirklich alten Code (PHP 5.1), die auf einem neueren Server ausgeführt werden muss.Sed zum Ersetzen <? mit <? php
Neuer Server hat PHP 5.6, so dass alle Bereiche, in denen
<?
verwendet werden, um den PHP-Kontext zu öffnen, werden diejenigen, die nicht korrekt interpretiert werden. Ich brauche alle Instanzen
<?
mit
<?php
außer wo
<?
bereits Teil
ersetzen<?php
Mein inital Aufwand war Rückreferenzierungen zu verwenden und sed:
cat file.php | sed -i 's/<?([^php])/<?php\$1/g'
jedoch die() scheint das Spiel zu brechen, und ohne sie kann ich nicht einen richtigen Rückbezug habe.
Ich habe versucht, was nach PHP Starttag in die Rückreferenzierung, so konnte ich zu bekommen war drehen Zeilen wie:
<?=$_COOKIE...
in
<?php=$_COOKIE...
Und bitte nicht Punkt mich an: Using sed to replace <? with <?php. Ich habe es schon gesehen, und es spricht nicht die Tatsache an, dass ich an manchen Orten bereits das neue Eröffnungs-Tag und in anderen das alte Eröffnungs-Tag habe. (Eine der Antworten irgendwie tut, aber ich würde es vorziehen, nicht zu erstellen "phpphphphpphp" und müssen immer wieder nach "php"
suchenSchließlich, bitte verzeihen Sie die seltsam verteilt offenen und schließenden Tags . SO kann sie nicht nur in Zeile angezeigt werden mit dem Text, wenn sie in einem Codeblock sind
'[^ php]' stimmt nicht mit einem Text überein, der nicht mit 'php' übereinstimmt, er passt nur zu 1 Zeichen, das entweder' p' oder 'h' ist. IMHO, das kann man mit sed regex nicht zuverlässig machen, da es Lookarounds nicht unterstützt. –
Die richtige Regex wäre etwas wie diese "<\? (?! PHP"), aber wie @ WiktorStribiżew angegeben, 'sed' unterstützt keine negativen Lookaheads. –
Ich war mir nicht bewusst, dass es negative Blickwinkel nicht unterstützt. Sieht aus, als müsste ich das in Python schreiben ... Danke, meine Herren. – DrDamnit