2011-01-14 1 views
0

Ich verwende das folgende Skript zum Suchen und Ersetzen der veralteten Funktionen in einer Datei durch die neueren.Skript zum Suchen und Ersetzen veralteter Funktionen

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 

Allerdings, wenn ich dieses Skript ausführen ich einen Fehler bin immer sagen:

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 

Ich bin nicht in der Lage, herauszufinden, was falsch gehen. Jemand bitte hilf mir. Grüße.

+0

sed sagt Ihnen, dass Sie '\ 2' verwenden, wenn Sie nur 1 Paar aufnehmende Klammern haben. –

Antwort

1

Ich weiß, sed heute nicht, aber es sieht aus wie die Gruppierung parenths besondere Chars sind, wenn sie entkommen, sonst wörtlich zu nehmen. Ich bin mir auch nicht sicher auf der Ersatzseite, wo es normalerweise literal ist und hier die Capture-Gruppen aussehen wie sie Backslashed sind.

Mit dem Beispiel des session_registers scheint es, als würde eine Erfassungsgruppe fehlen. Dies scheint die Lösung zu sein: s/ereg_replace\([^(]*\)(\([^,]*\),/preg_replace\1('#'.\2.'#',/g"

+0

ya richtig. Vielen Dank – Kartins