2011-01-14 67 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