我有一段时间尝试在bash脚本上获取文本(标头)的一部分,但我做不到。这是我的字符串:
link: <https://api.some.com/v1/monitor/zzsomeLongIdzz?access_token=xxSomeLongTokenxx==>; rel="monitor",<https://api.some.com/v1/services/xx/something-more/accounts/2345?access_token=xxSomeLongTokenxx==>; rel="parent"
这是一些格式,因此您可以更好地看到它:
link:
<https://api.some.com/v1/monitor/zzsomeLongIdzz?access_token=xxSomeLongTokenxx==>; rel="monitor",
<https://api.some.com/v1/services/xx/something-more/accounts/2345?access_token=xxSomeLongTokenxx==>; rel="parent"
我需要第二部分,仅是url
,基本上是,<
和之间的值,>; rel="parent"
并将其分配给变量,例如:
my_url = $(echo $complete_header) <== some way to filter that
我不知道如何应用一些正则表达式或模式来提取所需的数据。在过去,我曾使用jq
过过滤json
响应的方法,如下所示:
error_message=$(echo $response | jq '.["errors"]|.[0]|.["message"]')
但不幸的是,这不是json。有人可以为此指出正确的方向吗?
使用以下代码:
#!/bin/bash
link='<https://api.some.com/v1/monitor/zzsomeLongIdzz?access_token=xxSomeLongTokenxx==>; rel="monitor",<https://api.some.com/v1/services/xx/something-more/accounts/2345?access_token=xxSomeLongTokenxx==>; rel="parent"'
re=",<([^>]+)>"
# look for ,< literally
# capture everything that is not a > one or more times ([^>]+)
# look for the closing > literally
my_url="test"
if [[ $link =~ $re ]]; then my_url=${BASH_REMATCH[1]}; fi
echo $my_url
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句