Изменить теги PHP с помощью команды оболочки

Моя проблема заключается в следующем: я пытаюсь изменить все теги (<? в <php?) в нескольких сценариях с помощью следующей команды:

find . -name "*.php" -type f -print0 | xargs -0 sed -i -e 's/<? /<?php /g'

Проблема в том, что если у меня есть такой ярлык <?echo'Ble bla..'; игнорирует и не меняет. Я рекомендую делать?

2 ответа

Решение

Вы можете использовать следующую команду sed:

find -type f -name "*.php" -exec sed -i ':a;N;$!ba;s/<?\([ \n]\|echo\)/<?php \1/g' {} \;

Это соответствует либо пробел, либо перевод строки, либо термин echo после <? а затем заменяет его <?php<match_found>


Обратите внимание, что вам не нужно xargs вызов. Вы можете просто использовать find"s -exec вариант. Так же -e возможность sed не требуется, если вы используете только одно выражение. Так же -type критерии должны быть до -name вариант. В противном случае find выдаст предупреждение.

Вы всегда можете сделать это с помощью PHP:

#!/usr/bin/php 
<?php

foreach (glob("./*.php") as $fn) {
    $data = file_get_contents($fn);
    $data = preg_replace("/<\?php/", "<?", $data);
    $data = preg_replace("/<\?[\b\n\s]*/", "<?php ", $data);

    file_put_contents("./$fn", $data);
}
Другие вопросы по тегам