我的问题是:
我尝试使用以下命令在几个脚本中更改所有标记(<?
到<php?
):
find . -name "*.php" -type f -print0 | xargs -0 sed -i -e 's/<? /<?php /g'
问题是如果我有这样的标签<?echo'Ble bla..';
忽略它并且不会改变。
我建议做什么?
答案 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);
}