从var grep到一个新的var

时间:2018-03-18 11:36:21

标签: regex bash variables grep match

我现在已经尝试了几个小时了,只有当我使用一行代替完整的解析数据时,它才有效。

我正在做的是:

使用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>

如果有人可以帮助我,那就太棒了。

1 个答案:

答案 0 :(得分:2)

这项适用于所有用例的工作:

id=$( grep -oP 'details\.php\?id\=\K\d+' <<< "$var" )

请注意$( )用于命令替换,甚至嵌套。 2018年唯一正确的方式