ファイル:
O000000667520994000000074720121112000000N^@^@^@
以下のコマンドを使用しましたが、機能しません。
grep "^@^@^@" *
ファイル:
O000000667520994000000074720121112000000N^@^@^@
以下のコマンドを使用しましたが、機能しません。
grep "^@^@^@" *
回答:
^@
カラット^
とアットマークではなく、@
1文字です。これは、一部のプログラムがNUL文字(ASCII値0、\0
C とも呼ばれる)を表示する方法です。
ここでは、NULバイトを含むファイルを作成しました。†cat -v
非印刷文字を表示するために使用していることに注意してください。
$ cat -v blah
hello
null^@
hi
$ hexdump -C blah
00000000 68 65 6c 6c 6f 0a 6e 75 6c 6c 00 0a 68 69 0a |hello.null..hi.|
0000000f
Cで文字列を終了するために使用されるため、GrepはNULを見つけるのに問題があります。しかし、Sedは仕事をすることができます。
$ sed -n '/\x0/p' blah
null
$ sed -n '/\x0/p' blah | cat -v
null^@
† VIに、挿入モードのプレスでCtrl- V、Ctrl- Shift- @ヌルバイトを挿入します。
bashでは、C-q
またはで始まる特殊文字を追加できますC-v
。たとえば、次のことができます
grep 'Ctrl-vCtrl-a' file.txt
検索文字列は、ASCII値SOH(01)を検索するcontrol key
+ character v
に続いてcontrol key
+ として読み取られる必要がcharacter a
あります。残念ながら、これはNUL文字では機能しません。
^ @はNUL文字です。それを含むファイルの行をどうしますか?
あなたは見て持つことができ /programming/2398393/identifying-and-removing-null-characters-in-unix同様の問題を扱っています。
-a
オプションを追加したい場合grep
があります。そうしないと、バイナリデータであると判断され、一致する行が表示されません。