json - 尝试将 jq 与 --arg 选项一起使用时的 Shell 引用问题
问题描述
我在让 jq 使用-r
and--arg
选项来引用变量并避免“shell引用”问题时遇到问题。
这里的一个现有主题,建议使用--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 值没有被拾取。但是鉴于上面提到的答案,这应该是这样做的方法。我看不出我在哪里犯了错误。
有人看到这里的问题吗?
解决方案
You may use this as shell function:
pparselogs() {
while read data; do
echo "$data" | jq -rR '. as $line | try fromjson catch $line'
done
}
Then use it with invalid json
:
echo 'Hello World' | pparselogs
Hello World
and with valid json
:
echo '{"id":1, "message":"Hello World"}' | pparselogs
{
"id": 1,
"message": "Hello World"
}
推荐阅读
- arduino-ide - 将我在 Modbus 上收到的大端值转换为浮点值
- python - 比较两个数据框,但仅在特定列上
- python - 使用opencv在python中通过哪种算法进行人脸识别最准确的训练?
- android - 使用 BlueSnap sdk 实现 Google Pay Android 应用程序
- java - onResponse 方法中的可变变量不会改变
- rxjs - 我可以做些什么来执行多个单曲,但只有在前一个完成后才移动到下一个?
- angular - 如何测试路由器订阅
- cakephp-3.0 - Cakephp 3 搜索插件或将关键字读入pdf文件的解决方案
- google-app-engine - 如何确保应用引擎应用仅对 Google Cloud Task 可用?
- python - 我想在 python 中实现三边测量。我找不到我的功能有什么问题?