【发布时间】:2015-07-08 07:48:10
【问题描述】:
我正在编写 CGI 脚本,而在我之前从事此工作的开发人员使用了 SED 模式。
COMMAND=`echo "$QUERY_STRING" | sed -n 's/^.*com_tex=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"`
这里com_tex 是HTML 中文本框的名称。
这一行的作用是从 HTML 文本框中获取一个值并将其分配给一个 SHELL 变量。 SED 模式显然是(不确定)从 HTML 中提取值而没有其他不必要的附带内容所必需的。
我还会提到我要问的问题。相同的模式用于我输入命令的文本区域,我需要完全按原样检索它。然而,它变得混乱起来。例如。如果我在文本框中输入以下命令:
/usr/bin/free -m >> /home/admin/memlog.txt
存储在变量中的值是:
%2Fusr%2Fbin%2Ffree+-m+%3E%3E+%2Fhome%2Fadmin%2Fmemlog.txt
我们都可以得到 / 被 %2F 替换,空格被 + 替换,> 符号被 %3E 替换。
但我就是想不通上面的模式是如何指定的!有人能告诉我该模式是如何工作的,或者我应该在那里替换什么模式,以便我得到我输入的命令而不是我得到的输出?
【问题讨论】:
-
您的条目在 sed 替换中没有发生任何事情,因为没有模式匹配。所以它处于过程的早期阶段。顺便说一句,您可以通过将
' |sed"替换为;并将最后一个双引号替换为单引号来避免 seconf sed。
标签: regex bash sed pattern-matching cgi