我在让jq与-r
和--arg
选项一起使用来引用变量并避免“ shell引用”问题时遇到问题。
现有主题here建议使用--arg
定义命令。我已经尝试过在此shell函数中设计该函数,以接收日志输入并将其解析为json(如果它可以解析为json)。如果不是,则将其作为字符串转储出去。
function pparselogs () {
while read data
do
jq --arg line "$data" -R -r '. as $line | try fromjson catch $line'
done
}
我一直遇到的错误如下:
> echo "Hello World" | pparselogs .
jq: error: syntax error, unexpected '|', expecting '$' or '[' or '{' (Unix shell quoting issues?) at <top-level>, line 1:
. as | try fromjson catch
jq: 1 compile error
鉴于该错误抱怨着|
,似乎"$data"
的arg值没有被拾取。但是,鉴于上面提到的答案,这应该是这样做的方法。我看不到我在哪里犯错。
有人在这里看到问题吗?
答案 0 :(得分:3)
您可以将其用作shell函数:
pparselogs() {
while read data; do
echo "$data" | jq -rR '. as $line | try fromjson catch $line'
done
}
然后将其与无效的json
一起使用:
echo 'Hello World' | pparselogs
Hello World
并带有有效的json
:
echo '{"id":1, "message":"Hello World"}' | pparselogs
{
"id": 1,
"message": "Hello World"
}