替换代码,我有一个大的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