Файл:
O000000667520994000000074720121112000000N^@^@^@
Я использовал приведенную ниже команду, но она не работает.
grep "^@^@^@" *
Вы можете использовать grep для любых символов, включая управляющие / непечатаемые символы в режиме perl-regexp (-P), с помощью его шестнадцатеричного кода:
grep -Pa '\x00' ...
-a
опцию, иначеgrep
подумаете, что это двоичные данные и не будут отображать совпадающие строки.grep -Pv '\x00' file
не работает в Cygwin ...-a
(иногда?) это даже не находит образец. Благодарность! Может помочь @pbies.^@
это не карат^
и знак@
, это один символ. Вот как некоторые программы отображают символ NUL - значение ASCII 0, также известное как\0
C.Здесь я создал файл с байтом NUL. † Обратите внимание, что я использую,
cat -v
чтобы показать непечатные символы.Grep не может найти NUL, так как они используются для завершения строк в C. Однако Sed может выполнить эту работу:
† В vi в режиме вставки нажмите Ctrl- V, Ctrl- Shift- @чтобы вставить нулевой байт.
источник
Если
grep -P
не работает (например, в OS X), попробуйте это:источник
grep -Pa '\x00' ...
В bash вы можете добавлять специальные символы с префиксом
C-q
илиC-v
. Так вы можете, напримерСтрока поиска должна читаться как
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 на выход этого. Но, честно говоря, было бы сложно понять это правильно.источник