Файл:
O000000667520994000000074720121112000000N^@^@^@
Я использовал приведенную ниже команду, но она не работает.
grep "^@^@^@" *
Файл:
O000000667520994000000074720121112000000N^@^@^@
Я использовал приведенную ниже команду, но она не работает.
grep "^@^@^@" *
Ответы:
Вы можете использовать grep для любых символов, включая управляющие / непечатаемые символы в режиме perl-regexp (-P), с помощью его шестнадцатеричного кода:
grep -Pa '\x00' ...
grep -Pv '\x00' file
не работает в Cygwin ...
-a
(иногда?) это даже не находит образец. Благодарность! Может помочь @pbies.
^@
это не карат ^
и знак @
, это один символ. Вот как некоторые программы отображают символ 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
Grep не может найти NUL, так как они используются для завершения строк в C. Однако 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
Строка поиска должна читаться как control key
+ character v
, а затем control key
+ character a
, что ищет значение ASCII SOH (01). К сожалению, это не работает для персонажа NUL.
^ @ - это символ NUL. Что вы хотите сделать со строками ваших файлов, содержащих его?
Вы могли бы взглянуть на /programming/2398393/identifying-and-removing-null-characters-in-unix, где рассматривается аналогичная проблема.
Символ ^ @ - это NUL-символ, поэтому я боюсь, что он не может быть обработан напрямую.
Ваш лучший вариант, вероятно, будет написать простую программу, которая ищет эту последовательность байтов.
В качестве альтернативы вы можете попытаться преобразовать его в какой - либо форме шестнадцатеричного дампа ( od
, xxd
или так) и Grep на выход этого. Но, честно говоря, было бы сложно понять это правильно.
-a
опцию, иначеgrep
подумаете, что это двоичные данные и не будут отображать совпадающие строки.