Изменить теги 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);
}