【问题标题】:How to extract string field value from a URL using regular expression in shell script?如何在 shell 脚本中使用正则表达式从 URL 中提取字符串字段值?
【发布时间】:2015-02-03 17:58:06
【问题描述】:

我正在做一个项目,我需要从 bash shell 脚本对我的一台服务器进行 url 调用..

http://hostname.domain.com:8080/beat

点击上述网址后,我将得到以下响应,我需要对其进行解析并从中提取state 的值

num_retries_allowed: 3 count: 30 count_behind: 100 state: POST_INIT num_rounds: 60 hour_col: 2 day_col: 0

现在我想使用正则表达式提取state 变量值。我能够从中提取 countcount_behind 值,但不知道如何从中提取 state 值。

#send the request, put response in variable
DATA=$(wget -O - -q -t 1 http://hostname.domain.com:8080/beat)

#grep $DATA for count and count_behind
COUNT=$(echo $DATA | grep -oE 'count: [0-9]+' | awk '{print $2}')
COUNT_BEHIND=$(echo $DATA | grep -oE 'count_behind: [0-9]+' | awk '{print $2}')

# how to extract state variable value here?
STATE= what do I add here?

另外,如果在$DATA 中,如果state 变量不存在,那么我想将0 分配给STATE 变量。之后,我想根据条件验证条件并退出脚本。

如果STATE等于POST_INIT则成功退出shell脚本或STATE等于0,则也成功退出。

#verify conditionals
if [[ $STATE -eq "POST_INIT" || $STATE -eq "0" ]]; then exit 0; fi

【问题讨论】:

    标签: regex linux bash shell


    【解决方案1】:

    你可以使用这个grep -P

    state=$(grep -oP 'state: \K\S+' <<< "$DATA")   
    [[ -z "$state" ]] && state=0
    echo "$state"
    POST_INIT
    

    【讨论】:

    • 感谢阿努巴瓦。如果状态在 $DATA 中丢失,我如何分配零值?
    • grep 命令之后你可以这样做:[[ -z "$state" ]] &amp;&amp; state=0
    • 是的,这就是我的意思,意思是如果输入中缺少state: 字符串。你能用这个更新你的答案吗?
    • 酷。谢谢。如果缺少state: 字符串,您能否解释一下这是如何工作的,那么它将如何为其分配0,以及在正常情况下如何工作。仅出于我的理解目的。
    • 如果输入中缺少state: ,则grep 的输出为空,因此state 变量也为空。 -z "$state" 是检查变量是否为空。 &amp;&amp; 之后的部分在左手条件评估为真时执行。
    猜你喜欢
    • 1970-01-01
    • 2020-01-18
    • 1970-01-01
    • 2013-07-29
    • 2020-03-23
    • 2015-03-10
    • 1970-01-01
    • 2011-07-24
    相关资源
    最近更新 更多