使用shell命令更改PHP标记

时间:2014-06-21 16:17:37

标签: php sed gnu-findutils

我的问题是: 我尝试使用以下命令在几个脚本中更改所有标记(<?<php?):

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

问题是如果我有这样的标签<?echo'Ble bla..';忽略它并且不会改变。 我建议做什么?

2 个答案:

答案 0 :(得分:1)

您可以使用以下sed命令:

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

echo之后匹配空格或换行符或术语<?,然后将其替换为<?php<match_found>


请注意,您不需要xargs来电。您只需使用find的{​​{1}}选项即可。此外,只要您使用单个表达式,-exec -e选项就不是必需的。 sed条件也应该在-type选项之前。否则发现会发出警告。

答案 1 :(得分:0)

您可以随时使用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);
}