Файл:
O000000667520994000000074720121112000000N^@^@^@
Я використав команду нижче, але вона не працює.
grep "^@^@^@" *
Файл:
O000000667520994000000074720121112000000N^@^@^@
Я використав команду нижче, але вона не працює.
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^@
† In vi, у режимі вставки натисніть Ctrl- V, Ctrl- Shift-, @щоб вставити нульовий байт.
У bash ви можете додавати спеціальні символи, якщо вони мають префікс з C-q
або C-v
. Так можна, наприклад
grep 'Ctrl-vCtrl-a' file.txt
Рядок пошуку слід читати як control key
+ character v
, а потім control key
+ character a
, який шукає значення ASHII SOH (01). На жаль, це не працює для символу NUL.
^ @ - символ NUL. Що ви хочете зробити з рядками файлів, що містять його?
Ви можете подивитися на /programming/2398393/identifying-and-removing-null-characters-in-unix, який займається подібною проблемою.
Символ ^ @ - це символ NUL, тому я боюся, що його неможливо отримати безпосередньо.
Найкращим варіантом буде, мабуть, написати просту програму, яка шукає цю послідовність байтів.
Як альтернативи ви можете спробувати перетворити його в який - якій формі шістнадцятирічного дампа ( od
, xxd
або так) і Grep на вихід цього. Але, чесно кажучи, було б складно виправити це.
-a
опцію, інакшеgrep
він вважає, що це двійкові дані, і не буде відображати відповідні рядки.