我试图以编程方式替换<?
与<?php
在一堆文件中,但我的sed正则表达式不像我预期的那样。你能告诉我它有什么问题吗?使用sed替换<?与<?php
我在命令行上这里测试它:
$ sed -e 's/<\?/<\?php/g'
<?
<?php?<?php
d
<?phpd<?php
我试图以编程方式替换<?
与<?php
在一堆文件中,但我的sed正则表达式不像我预期的那样。你能告诉我它有什么问题吗?使用sed替换<?与<?php
我在命令行上这里测试它:
$ sed -e 's/<\?/<\?php/g'
<?
<?php?<?php
d
<?phpd<?php
我不认为你需要对这种转义:
sed -e 's/<?/<?php/g'
事实上,你不知道。 – 2011-05-16 20:20:37
是的,我认为你可以。您发布的解决方案将匹配可选的<,而不是文字<? – 2011-05-16 20:23:33
也许它取决于sed的版本,但是我使用的版本中的'\?'是可选的字符量词。 http://www.gnu.org/software/sed/manual/html_node/Regular-Expressions.html – 2011-05-16 20:26:41
你真的必须使用SED,或者你也可以使用perl?
perl -pi.tmp -e 's,^<\?(?!php),<?php,' *.php *.inc
rm *.tmp
我使用的是负前瞻,以避免在该文件已经用正确的字符开头的情况下产生<?phpphp
。
您不需要替换替换中的后退引用。
sed 's#<\?#<?php#'
在一个管道中,为PHP加倍纠正:
sed 's#<\?#<?php#g' | sed 's#phpphp#php#g'
什么是你的输入,你有什么输出 - 这是测试案例“是不可能的阅读 – 2011-05-16 20:18:26