regex - What does the following SED pattern exactly do? -
i working on cgi script , developer worked on before me has used sed pattern.
command=`echo "$query_string" | sed -n 's/^.*com_tex=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"` here com_tex name of text box in html.
what line takes value form html text box , assigns shell variable. sed pattern apparently (not sure) necessary extract value html without other unnecessary accompanying stuff.
i mention issue asking this. same pattern used text area entering command , need retrieved is. it's getting jumbled up. eg. if enter following command in text box:
/usr/bin/free -m >> /home/admin/memlog.txt
the value gets stored in variable is:
%2fusr%2fbin%2ffree+-m+%3e%3e+%2fhome%2fadmin%2fmemlog.txt
all of can / being substituted %2f, space + , > sign %3e.
but can not figure how specified in above pattern! please tell me how pattern works or pattern should substitute there entered command instead of output getting?
sed -n -n switch means "dont print"
's/ s substitutions, / delimiter command looks like
s/thing sub/subsitution/optional command
^.*com_tex= ^ means start of line
.* means match 0 or more of character
match longest string start of line com_tex=
\(\) this capture group, whatever matched inside these brackets saved , can used later
[^&]* [^] when hat used inside square brackets means not match characters inside brackets
* same before means 0 or more matches
the capture group combined means capture character except &.
.*$ the same first bit except $ means end of line, matches until end
/\1/p' after second / substitution. \1 capture group before, substitute matched in first part(the whole line) capture group. p means print, must explicitly stated -n switch used , prevent other lines being printed.
| pipe
s/%20/ /g sub %20 space, g means global every match on line
hth :)
Comments
Post a Comment