{"running": 1, "finished": 3, "node_name": "L-2.local", "pending": 0, "status": "ok"}
我试图解析此响应以检查"运行"的值使用bash脚本。我知道有这样的库可以做到这一点,但有些原因是jq库不能安装,我不想安装它,因为我只需要这个命令。通常我会改用Python。
我尝试在另一个答案中使用此命令,在响应中
| grep -Po '"running":"\K[^,]*'
但由于"而失败了。"
bash: {"running": 0, "finished": 0, "node_name": "L-2: command not found
有没有办法让它检查"运行"的价值?用grep,没有错误?
答案 0 :(得分:3)
首先,此错误bash: {"running": 0, "finished": 0, "node_name": "L-2: command not found
是因为您在表达式之前不使用echo。
使用:echo '{"running": 1, "finished": 3, "node_name": "L-2.local", "pending": 0, "status": "ok"}' | grep -Po '"running":\s*\K\d+'
答案 1 :(得分:1)
您可以使用sed
删除不需要的内容,只使用捕获组和反向引用捕获并保留所需内容:
s='{"running": 1, "finished": 3, "node_name": "L-2.local", "pending": 0, "status": "ok"}'
echo $s | sed 's/.*"running":[[:space:]]*\([0-9]*\).*/\1/'
请参阅online demo。
模式详情
.*
- 尽可能多的0个字符"running":
- 文字子字符串[[:space:]]*
- 0+ whitespaces \([0-9]*\)
- 一个捕获组(注意转义,它们是必要的,因为该模式符合POSIX BRE)匹配0或更多位数.*
- 其余部分。 \1
是对第1组值的反向引用。