
以下の表現を見つけようとしたとき。
$ grep -A2 "IPv6: ADDRCONF(NETDEV_CHANGE): eth1: link becomes ready" log.txt
私が得た結果は -
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
@@@@
今これがシステムのクラッシュを意味すると思います。 「@^@」を取得するにはどうすればgrepできますか?
grep @^ file.txt
、、そしていくつかの他の表現を試しましたが、成功しませんでしたgrep '@^' file.txt
。grep '@.*@.*@' file.txt
答え1
最初にファイルをフラッシュせずにシステムを再起動すると、記録しているファイルのサイズが変わる可能性がありますが、データはまだディスクに書き込まれていません。
この場合、ファイルの脆弱性には NUL 文字が含まれます。 (再起動せずに意図的に脆弱なファイルを生成することも可能ですが、あなたのシナリオには適用されないようです)。
^@
一部のツールは、印刷できない単一文字のプレースホルダであるNUL文字を表示します。これは^
次の文字とまったく異なるため、@
grepコマンドは機能しません。
この情報により、私は以下を見つけることができました。回答姉妹サイトから。提案された回避策は、grepに次のパラメータを使用することです。
grep -Pa '\x00'
私はこれをテストし、それは私に効果的です。どちらか一方だけでは機能しないため、両方とも-P
一緒-a
に使用する必要\x00
があります。
答え2
「@^@」のある行だけを検索する場合に使用できますgrep "\@\^\@" file.txt
(特殊文字をエスケープする必要があります)。