簡體   English   中英

將 grep output 饋送到 xargs

[英]Feed grep output to xargs

我正在嘗試將 grep output 輸入 xargs,但沒有任何反應。 我有以下命令(沒有 grep)可以正常工作:

tail -f /var/log/nginx/access.log|\ 
awk '{print "insert or ignore into referrer (url) values (" $11 ");"}'|\ 
sqlite3 referrer.sqlite3

這基本上是監視我的 nginx 訪問日志並將它可以找到的所有引用者寫入 SQLite 數據庫。 但是,我不想把所有的referrer都寫進數據庫,我想過濾掉一些,所以我把命令調整成這樣:

tail -f /var/log/nginx/access.log|\
awk '{print "insert or ignore into referrer (url) values (" $11 ");"}'|\
grep -Ev '("https?://www.bing.com/|"https?://(m|www).facebook.com("|/)|"-")'

這會過濾掉任何以 Bing 或 Facebook 作為引用者的訪問請求,以及過濾掉沒有引用者的請求。 這仍然可以正常工作。 但是,我無法將此命令中的 output 轉發到 sqlite 或 xargs。 當我 append 時:

|sqlite3 referrer.sqlite3

或者

|xargs sqlite3 referrer.sqlite3

什么也沒發生,它似乎沒有得到任何輸入。 此外,當我使用xargs echo來回顯命令而不是執行命令時,什么也沒有顯示。 我還嘗試在 grep 中添加-Z並在 xargs 中添加-0 ,因此它們都使用空字節而不是換行符。 但是,這也沒有任何幫助。

我錯過了什么? 為什么在 grep 之后我的命令的 output 不能“轉發”?

grepawk命令在寫入 pipe 時默認為行緩沖。 您必須告知他們您希望降低效率(失去績效)。

awk -W interactive
grep --line-buffered

將這些選項添加到您的命令中以避免緩沖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM