我有一些时间试图在 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
见 a demo on ideone.com 。
关于regex - 使用 bash 脚本从标题中提取父 url,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35208709/