我正在尝试将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之后不能“转发”?