SED在php脚本中查找/替换代码

时间:2017-10-06 15:31:31

标签: sed

我有一个包含以下行的大型PHP脚本

$user = $_REQUEST['user'];

完全匹配仅在整个页面中出现一次。我想把它改成

$user = urldecode($_REQUEST['user']);

有人能建议最好的方法吗? 我正在考虑SED,但我尝试过的所有内容都未能找到并替换它。

有什么想法吗?

由于

4 个答案:

答案 0 :(得分:0)

sed 方法:

sed -E "s/^(\\\$user = )(\\\$_REQUEST\['user'\])/\1urldecode(\2)/" file.php

答案 1 :(得分:0)

以下应该会帮助你。

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

答案 2 :(得分:0)

$ awk 'index($0,"$user = $_REQUEST[\047user\047];") { sub(/= /,"&urldecode("); sub(/;/,")&") } 1' file
$user = urldecode($_REQUEST['user']);

答案 3 :(得分:0)

这可能适合你(GNU sed):

sed '/^$user = $_REQUEST\['\''user'\''\];$/s/$_[^;]*/urldecode(&)/' file

匹配字符串,然后使用替换来修改它的一部分。

N.B。 '\''关闭当前单引号sed命令,引入另一个单引号,然后开始sed命令的其余部分,即它打到一个洞到shell,然后引用单引号。