将grep输出提供给xargs

时间:2017-03-02 14:42:47

标签: bash grep xargs

我正在尝试将grep输出提供给xargs,但什么也没发生。 我有以下命令(没有grep)可以正常工作:

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

这基本上是监视我的nginx访问日志并将它可以找到的所有引用者写入SQLite数据库。但是,我不想将所有引用程序写入数据库,我想过滤掉一些,所以我将命令调整为:

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作为引荐来源的所有访问请求,并过滤掉不带引荐来源的请求。这仍然很好。但是,我无法将此命令的输出转发到sqlite或xargs。当我追加:

|sqlite3 referrer.sqlite3

或者

|xargs sqlite3 referrer.sqlite3

什么都没发生,似乎没有得到任何输入。此外,当我使用xargs echo来回显命令而不是执行命令时,不会显示任何内容。我还尝试向grep添加-Z,向xargs添加-0,因此它们都使用空字节而不是换行符。但是,这也没有任何帮助。

我错过了什么?为什么我的命令输出在grep之后不能“转发”?

0 个答案:

没有答案