我需要打印匹配字符串后面的内容

2024-05-16 18:49:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为我和我的朋友构建一个slack robot,在这个过程中我使用了uptimerobot和slackapi。我的问题是,我不知道如何从uptimerobotapi的返回消息中只打印出某些值。代码现在是这样的:

import requests
#from subprocess import call


#UPTIMEROBOT
url = "https://api.uptimerobot.com/v2/getMonitors"

payload = "api_key=apikeyhere&format=json&all_time_uptime_ratio=1"
headers = {
    'content-type': "application/x-www-form-urlencoded",
    'cache-control': "no-cache"
    }

response = requests.request("POST", url, data=payload, headers=headers)

如果我运行这个脚本,我会得到以下输出(有些被省略):

{"stat":"ok","pagination":{"offset":0,"limit":50,"total":3},"monitors":[{"id":value,"friendly_name":"name"

我现在要做的就是简单地运行脚本并将其导入awk,如下所示:

python3 slackbot.py | awk -F "friendly_name:" {'print $2'}

但它一点也不回。我想得到的只是一个没有引号的名字。你知道吗

如果有人能帮我,那就太好了。你知道吗


Tags: nameimport脚本apiurlcacherobot朋友
1条回答
网友
1楼 · 发布于 2024-05-16 18:49:52

Awk可能不是最好的解决方案,因为您可以通过将json数据视为对象来更轻松地操作它。使用命令行程序jq可以很好地工作,比如jq '.monitors[0].friendly_name'。你知道吗

基于您的问题使用json对象的工作示例:

echo '{"stat":"ok","pagination":{"offset":0,"limit":50,"total":3},"monitors":[{"id":1,"friendly_name":"name"'}]} | jq '.monitors[0].friendly_name'

awk命令不起作用的原因是,当您需要friendly_name":"时,您正在按friendly_name:分割数据。你知道吗

如果要添加":",需要像这样转义双引号:

awk -F "friendly_name\":\"" {'print $2'}

这仍然会给你留下额外的"。您可以很容易地删除",但我建议您使用jq路线,因为它更易于维护。你知道吗

相关问题 更多 >