gpt4 book ai didi

linux - curl 流输出逐行读取并包含条件

转载 作者:行者123 更新时间:2023-12-04 14:04:21 24 4
gpt4 key购买 nike

我有一个允许监视某些事件的 API url。我可以用一个简单的代码 curl "https://theurl.events/logs" 所有日志都是文本格式,它永远不会结束,所以我只运行 curl 命令并保留那里。

现在我想设置一些条件,如果日志包含 keyword 然后做一些事情。

日志如下所示,它看起来像 json 但它是文本而不是 json

action=machinestarted,
data={
"location": "Place A"
"lag": "033"
"size": "5543"
"id": "11",
.....
}
action=Error,
data={
"location": "Place B"
"lag": "033"
"size": "5543"
"id": "11",
.....
}

到目前为止,我可以通过 curl "https://theurl.events/logs"2>&1 | 过滤日志grep 错误 | ./runbash.sh

随着事件的增多,我想 grep 更多关键字,例如。 grep WrongOperationgrep WrongButton 然后我想运行不同的 bash 文件。

我不认为单独运行它们是个好主意,例如

"https://theurl.events/logs" 2>&1 | grep Error` | ./runbash1.sh
"https://theurl.events/logs" 2>&1 | grep WrongOperation` | ./runbash2.sh
"https://theurl.events/logs" 2>&1 | grep WrongButton` | ./runbash3.sh

所以我想知道是否可以使用 while 循环 curl 的输出并包含多个条件,比如

while IFS= read -r line (from curl)
do
if [[ "$line" == *"WrongOperation"* ]]; then
//do something
elif
[[ "$line" == *"WrongButton"* ]]
//.....
done

最佳答案

没有 while + read 循环,类似的东西。

#!/usr/bin/env bash

output=$(
curl "https://theurl.events/logs" 2>&1 |
grep -E 'Error|WrongOperation|WronButton'
)

printf '%s\n' "$output"

if [[ $output =~ Error ]]; then
echo ./runbash1.sh
elif [[ $output =~ WrongOperation ]]; then
echo ./runbash2.sh
elif [[ $output =~ WronButton ]]; then
echo ./runbash3.sh
fi

如果您对输出满意,请移除 echo

关于linux - curl 流输出逐行读取并包含条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69009786/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com