Xargs
這個 xargs 命令有什麼問題?
我正在嘗試這兩種變體:
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。
jq '.' /var/log/zwave.log
如果只需要過濾掉 json 行,在它前面使用 grep
grep -E "^{" test.txt | jq '.'
Xargs 用於將每一行作為參數附加到給定命令;它基本上相當於:
jq '.' $LINE1 jq '.' $LINE2 jq '.' $LINE3
這就是你所看到的。當文件包含要傳遞給命令的其他文件或參數的列表時,您應該使用 xargs。