【问题标题】:grep from var into a new var从 var grep 到一个新的 var
【发布时间】: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 "(?&lt;=URL\=\.\/details.php\?id\=)(.+)(?=&amp;)" &lt;&lt;&lt; "$var" )。还有一个过时的结构可以在 $(..) 上做同样的事情,使用反引号 `` 不推荐这样做,并且在使用嵌套引号时会变得非常混乱。

标签: regex bash variables grep match


【解决方案1】:

这适用于所有用例:

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

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

【讨论】:

  • 谢谢,这很好用!你为我节省了更多的头痛时间。
猜你喜欢
  • 2018-05-24
  • 2023-03-24
  • 2015-08-23
  • 1970-01-01
  • 1970-01-01
  • 2015-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多