首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >grep不打印匹配

grep不打印匹配
EN

Unix & Linux用户
提问于 2018-04-12 16:23:48
回答 1查看 8.4K关注 0票数 1

我试图用grep打印/var/log/auth.log中的所有根访问尝试。但是似乎grep并没有处理整个文件,相反,grep在某个时候停止了:

代码语言:javascript
复制
> less /var/log/auth.log | grep Accepted
Apr 10 08:32:43 sshd[16845]: Accepted password for root from ... port 49061 ssh2
Apr 10 09:42:38 sshd[15451]: Accepted password for root from ... port 48990 ssh2
Apr 10 10:11:17 sshd[21592]: Accepted password for root from ... port 48686 ssh2
Apr 10 12:09:03 sshd[5757]: Accepted password for root from ... port 62535 ssh2
Apr 11 18:12:12 sshd[1804]: Accepted password for root from ... port 40765 ssh2
Apr 11 18:12:30 sshd[1884]: Accepted password for root from ... port 40808 ssh2
Apr 11 18:13:46 sshd[2063]: Accepted password for root from ... port 40735 ssh2
Apr 11 19:58:44 sshd[17103]: Accepted password for root from ... port 40684 ssh2
Apr 11 20:48:06 sshd[24583]: Accepted password for root from ... port 40466 ssh2
Binary file (standard input) matches

正如我们所看到的,只有在4月11日之前才有条目。因此,如果我尝试以下命令:

代码语言:javascript
复制
> less /var/log/auth.log | grep "Apr 12"
Binary file (standard input) matches

什么都没有印出来。但是在文件/var/log/auth.log中,"Apr 12“条目是存在的,我们可以看到如果运行这个命令(我还通过使用cat打印整个文件来证明这一点):

代码语言:javascript
复制
> less /var/log/auth.log | grep -c "Apr 12"
4297

我不明白我的第一个grep命令做错了什么。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2018-04-12 16:31:33

若要强制grep将具有二进制内容的文件视为ASCII,请使用其-a标志:

代码语言:javascript
复制
grep -a 'Apr 12' /var/log/auth.log

这是一个非标准的选项,但在GNU grepgrep on OpenBSD中实现(可能还有其他的BSD)。

当GNU grep处理的数据包含nul字节时,或者当它被错误地为当前区域设置编码时,grep将把它作为二进制处理。对于-a--binary-files=text,GNU grep将被迫将此类数据作为文本处理。请参阅GNU --binary-files手册中的grep选项的文档。

grep通常拒绝输出二进制数据,因为它可能“如果输出是终端,并且终端驱动程序将其中的一些解释为命令,则会产生严重的副作用”。(引用自手册)。

票数 7
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/437345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档