替換代碼,我有一個大的PHP腳本,包含以下行SED中找到/ PHP腳本
$user = $_REQUEST['user'];
的精確匹配只能在整個頁面中出現一次。我想將其更改爲
$user = urldecode($_REQUEST['user']);
能有人建議最好的方法是什麼? 我在想SED,但是我試過的一切都找不到並取代它。
任何想法?
感謝
替換代碼,我有一個大的PHP腳本,包含以下行SED中找到/ PHP腳本
$user = $_REQUEST['user'];
的精確匹配只能在整個頁面中出現一次。我想將其更改爲
$user = urldecode($_REQUEST['user']);
能有人建議最好的方法是什麼? 我在想SED,但是我試過的一切都找不到並取代它。
任何想法?
感謝
sed的方法:
sed -E "s/^(\\\$user =)(\\\$_REQUEST\['user'\])/\1urldecode(\2)/" file.php
感謝但值$ user ='出現了幾次該頁面,作爲'$ user = $ _REQUEST ['user'];'只出現一次。 – Tom
@Tom,看我的更新 – RomanPerekhrest
以下應該可以幫助你一樣。
sed 's/^$user = $_REQUEST\['"'"'user'"'"'\]\;$/$user = urldecode($_REQUEST\['"'"'user'"'"'\]);/' Input_file
比方說,下面是Input_file(我在這裏假設)。
cat Input_file
^@^@^@^@00000305^@^@^@^@^@^@430^@430^@^@^@^@^@^@^@^@^@09079989530
$user = $_REQUEST['user'];
tefqfwqfb$user = $_REQUEST['user'];
wvwrjvnwvjn$user = $_REQUEST['user'];fwvwrev
因此,運行上面的代碼後,將輸出。
sed 's/^$user = $_REQUEST\['"'"'user'"'"'\]\;$/$user = urldecode($_REQUEST\['"'"'user'"'"'\]);/' Input_file
^@^@^@^@00000305^@^@^@^@^@^@430^@430^@^@^@^@^@^@^@^@^@09079989530
$user = urldecode($_REQUEST['user']);
tefqfwqfb$user = $_REQUEST['user'];
wvwrjvnwvjn$user = $_REQUEST['user'];fwvwrev
謝謝。你能建議爲什麼需要所有的報價和雙引號。 ? – Tom
@Tom,不客氣。如果告訴sed我們在sed的通常''bla_bla_bla''之間有一個'''',那麼這是一種方法。意思是,如果你簡單地使用''bla_bla'bla_bla'',那麼sed會拋出錯誤,因爲它會認爲block沒有完成,所以讓sed知道我們的文本在這之間已經有''''了。 – RavinderSingh13
$ awk 'index($0,"$user = $_REQUEST[\047user\047];") { sub(/= /,"&urldecode("); sub(/;/,")&") } 1' file
$user = urldecode($_REQUEST['user']);
這可能爲你工作(GNU SED):
sed '/^$user = $_REQUEST\['\''user'\''\];$/s/$_[^;]*/urldecode(&)/' file
匹配字符串,然後使用替代修改它的一部分。
N.B. '\''
關閉當前的單引號sed命令,引入另一個單引號,然後開始sed命令的其餘部分,即它打洞到shell,然後引用單引號。
添加您嘗試過的代碼...也會建議在整行上使用awk字符串匹配,以避免必須照顧元字符 – Sundeep