我现在已经尝试了几个小时了,只有当我使用一行代替完整的解析数据时,它才有效。
我正在做的是:
使用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>
如果有人可以帮助我,那就太棒了。
答案 0 :(得分:2)
这项适用于所有用例的工作:
id=$( grep -oP 'details\.php\?id\=\K\d+' <<< "$var" )
请注意$( )
用于命令替换,甚至嵌套。 2018年唯一正确的方式