2011-05-16 96 views
1

我試圖以編程方式替換<?<?php在一堆文件中,但我的sed正則表達式不像我預期的那樣。你能告訴我它有什麼問題嗎?使用sed替換<?與<?php

我在命令行上這裏測試它:

$ sed -e 's/<\?/<\?php/g' 
<? 
<?php?<?php 
d 
<?phpd<?php 
+0

什麼是你的輸入,你有什麼輸出 - 這是測試案例「是不可能的閱讀 – 2011-05-16 20:18:26

回答

3

我不認爲你需要對這種轉義:

sed -e 's/<?/<?php/g' 
+0

事實上,你不知道。 – 2011-05-16 20:20:37

+0

是的,我認爲你可以。您發佈的解決方案將匹配可選的<,而不是文字<? – 2011-05-16 20:23:33

+0

也許它取決於sed的版本,但是我使用的版本中的'\?'是可選的字符量詞。 http://www.gnu.org/software/sed/manual/html_node/Regular-Expressions.html – 2011-05-16 20:26:41

0

你真的必須使用SED,或者你也可以使用perl?

perl -pi.tmp -e 's,^<\?(?!php),<?php,' *.php *.inc 
rm *.tmp 

我使用的是負前瞻,以避免在該文件已經用正確的字符開頭的情況下產生<?phpphp

1

您不需要替換替換中的後退引用。

sed 's#<\?#<?php#' 

在一個管道中,爲PHP加倍糾正:

sed 's#<\?#<?php#g' | sed 's#phpphp#php#g'