Xargs

這個 xargs 命令有什麼問題?

  • December 18, 2017

我正在嘗試這兩種變體:

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。

引用自:https://unix.stackexchange.com/questions/408825