我正在尝试这两种变体:
cat /var/log/zwave.log | xargs -n1 jq '.'
&:
</var/log/zwave.log xargs -n1 jq '.'
似乎两个命令都运行,但它尝试将该行作为文件位置打开。这对于我列出的第二个命令是有意义的,但是对于第一个使用管道的命令,它不应该表现得好像每一行都通过zwave.log
管道传输到jq '.'
?
我正在处理但无法控制生成的日志系统在日志文件的每一行上创建一个 json 对象:
{ "name": "PeriodicWork", "hostname": "myHost", "pid": 12189.20, "level": 20, "msg": "Executing [CheckFailedTask NodeId=8]", "time": "2017-12-04T00:20:30.953Z", "v": 0 }
但是记录器偶尔会失败并产生类似Unable to start service: [TimeoutError: operation timed out]
.
这就是为什么我不能只jq
在文件上使用。
不要使用 xargs。
如果只需要过滤掉 json 行,在它前面使用 grep
Xargs 用于将每一行作为参数附加到给定命令;它基本上相当于:
这就是你所看到的。当文件包含要传递给命令的其他文件或参数的列表时,您应该使用 xargs。