【发布时间】:2018-08-27 02:16:59
【问题描述】:
我现在已经尝试了几个小时,只有当我使用单行而不是一个充满解析数据的 var 时它才有效。
我正在做的是:
使用 curl 登录,导航到子站点并将其存储在一个变量中,例如:
# get_token
login_token=$(curl --insecure --cookie-jar $COOKIE -L <website> --stderr - | grep -Pzo "(?<=type.\=.\"hidden\".name.\=.\"login_token\".value.\=.\")(.+)(?=\")")
# login
curl --insecure --cookie $COOKIE --cookie-jar $COOKIE --data "&login_token=$login_token&username=$LOGIN&password=$PASS&pin=$PIN&submit=submit" <website>
# getdata
var=$( curl --insecure --cookie $COOKIE --cookie-jar $COOKIE -L <websitesubpage>)
一切都像魅力一样,但现在我被困住了。
我正在尝试从 $var 中获取 id:
get_id=${ grep -Pzo "(?<=URL\=\.\/details.php\?id\=)(.+)(?=&)" <<< "$var"} #dont work
get_id="`echo "$var" | grep -Pzo '?<=URL\=\.\/details.php\?id\=)(.+)(?=&)'`" #dont work
等等。
正则表达式一定没问题,我已经测试过很多次了。但这是我需要 id 的字符串:
<meta http-equiv="refresh" content="0; URL=./details.php?id=196417&readed=yes" />
或者也在响应中:
<p style="text-align:center"><a href="details.php?id=196417">Go ahead</a></p>
</td></tr></table><br>
如果有人可以帮助我,那就太好了。
【问题讨论】:
-
运行嵌套命令的语法是命令替换,语法为
$(..),${..}用于扩展变量做get_id=$( grep -Pzo "(?<=URL\=\.\/details.php\?id\=)(.+)(?=&)" <<< "$var" )。还有一个过时的结构可以在$(..)上做同样的事情,使用反引号 `` 不推荐这样做,并且在使用嵌套引号时会变得非常混乱。
标签: regex bash variables grep match