Vig*_* SP 0 linux grep linux-kernel
当我尝试 grep 下面的表达式时。
$ grep -A2 "IPv6: ADDRCONF(NETDEV_CHANGE): eth1: link becomes ready" log.txt
Run Code Online (Sandbox Code Playgroud)
我得到的结果是 -
date-time kern servname: []: info [ 83.262033] IPv6: ADDRCONF(NETDEV_CHANGE): eth1: link becomes ready
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@date-time syslog servname syslog-ng[10831]: notice syslog-ng starting up; version='3.2.5'
date-time kern servname: []: info [ 0.000000] Initializing cgroup subsys cpuset
Run Code Online (Sandbox Code Playgroud)
现在@@@@
我相信它代表系统崩溃,我怎么能只为“@^@”grep。
我尝试了grep @^ file.txt
, grep '@^' file.txt
,grep '@.*@.*@' file.txt
和其他一些表达方式,但运气不佳。
当系统在没有首先刷新文件的情况下重新启动时,正在写入的文件可能具有新的大小,但数据尚未写入磁盘。
在这种情况下,文件中的漏洞将包含 NUL 字符。(也可以在不重启的情况下故意创建带有漏洞的文件,但我认为这不适用于您的场景。)
某些工具会将 NUL 字符显示为^@
它是单个不可打印字符的占位符,与 a^
后跟 a完全不同@
,这就是您的 grep 命令不起作用的原因。
有了这些信息,我就可以在姐妹网站上找到答案。解决方案建议对 grep 使用以下参数:
grep -Pa '\x00'
Run Code Online (Sandbox Code Playgroud)
我已经测试过这对我有用。请注意,单独使用-P
或-a
不起作用,您确实需要它们才能\x00
起作用。