2011-01-14 69 views
0

我使用下面的腳本進行搜索,並用較新的替換文件棄用的功能。腳本來搜索和替換過時的功能

5 for strFile in `ls deprecated_functions_search_and_replace.txt ` 
    6 do 
    7  sed "s/ereg_replace[^\(]*(\([^,]*\),/preg_replace\1('#'.\2.'#',/g" $strFile > temp_file 
    8  mv $strFile $strFile".bakup" 
    9  mv temp_file $strFile 
10 
11  sed "s/eregi[^\(]*(\([^,]*\),/preg_match\1('#'.\2.'#i',/g" $strFile > temp_file 
12  mv $strFile $strFile".bakup" 
13  mv temp_file $strFile 
14 
15  sed "s/ereg[^\(]*(\([^,]*\),/preg_match\1('#'.\2.'#',/g" $strFile > temp_file 
16  mv $strFile $strFile".bakup" 
17  mv temp_file $strFile 
18 
19  sed "s/split[^\(]*(\([^,]*\),/preg_split\1('#'.\2.'#',/g" $strFile > temp_file 
20  mv $strFile $strFile".bakup" 
21  mv temp_file $strFile 
22 
23  sed "s/mysql_escape_string/mysql_real_escape_string/g" $strFile > temp_file 
24  mv $strFile $strFile".bakup" 
25  mv temp_file $strFile 
26 
27  sed "s/set_magic_quotes_runtime(0)/\/\/set_magic_quotes_runtime(0)/g" $strFile > temp_file 
28  mv $strFile $strFile".bakup" 
29  mv temp_file $strFile 
30 
31  sed "s/ini_get('safe_mode')/false/g" $strFile > temp_file 
32  mv $strFile $strFile".bakup" 
33  mv temp_file $strFile 
34 
35  sed "s/session_register('\(.*\)')/$_SESSION['\1']=$\1/g" $strFile > temp_file 
36  mv $strFile $strFile".bakup" 
37  mv temp_file $strFile 
38 
39  sed "s/session_unregister('\(.*\)')/$_SESSION['\1']=''/g" $strFile > temp_file 
40  mv $strFile $strFile".bakup" 
41  mv temp_file $strFile 
42 
43 done 

然而,當我運行此腳本我得到一個錯誤說:

sed: -e expression #1, char 60: invalid reference \2 on `s' command's RHS 
sed: -e expression #1, char 52: invalid reference \2 on `s' command's RHS 
sed: -e expression #1, char 50: invalid reference \2 on `s' command's RHS 
sed: -e expression #1, char 51: invalid reference \2 on `s' command's RHS 

我無法弄清楚怎麼回事錯了。有人請幫助我。問候。

+0

sed告訴你,當你只有1對捕獲括號時使用`\ 2`。 – 2011-01-14 12:13:36

回答

1

我不知道今天的sed做,但它看起來像分組parenths特殊字符的,否則逃脫時,文字。我也不確定在替換方面,它通常是字面的,而這裏的捕獲組看起來像是背對背的。

因此,使用session_register的例子,它似乎缺少一個捕獲組。 這似乎是修復:s/ereg_replace\([^(]*\)(\([^,]*\),/preg_replace\1('#'.\2.'#',/g"

+0

你是對的。謝謝 – Kartins 2011-01-14 08:27:49