在Bash中提取部分curl返回以分配给变量

时间:2015-02-25 07:12:57

标签: bash curl

我想在bash脚本中从curl返回的网页中提取字符串值,但我不确定如何解决这个问题?

我感兴趣的值总是由curl返回,如下所示:

    <head>
    <title>UKIPVPN.COM FREE VPN Service</title>
    <style type='text/css'>
      #button {
        width:180px;
        height:60px;
        font-family:verdana,arial,helvetica,sans-serif;
        font-size:20px;
        font-weight: bold;
      }
    </style>
  </head>
  <br>
  <br>
     <font color=blue><center>  <h1>Welcome to Free UK IP VPN Service</h1>               </center></font>

     <form method='post' action='http://www.ukipvpn.com'>
  <center><input type='hidden' name='sessionid' value='4b5q43mhhgl95nsa9v9lg8kac7'></center><br>
  <center><input id='button' type='submit' value='  I AGREE  ' /><br><br>     <h2> Your TOS Let me use the Free VPN Service</h2></center>
     </form>



       <br><center><font size='2'>No illegal activities allowed. In case of abuse, users' VPN access log is subjected to expose to related authorities.</font></center>
       </html>

我想在Bash中提取变量的值是value ='这是我感兴趣的值'。

感谢您的帮助;

安迪

2 个答案:

答案 0 :(得分:1)

您可以尝试下面的内容。

$ val=$(curl somelink | grep -oP "name='sessionid'[^<>]*\bvalue\s*=\s*'\K[^']*")

答案 1 :(得分:1)

some arguments against使用正则表达式来解析HTML。

这是使用tidyxmlstarlet的基于XPath的更强大的版本:

var=$(curl someurl | 
  tidy -asxml 2> /dev/null | 
  xmlstarlet sel -t -v '//_:input[@name="sessionid"]/@value' 2> /dev/null);