Чи є спосіб виявити нульові байти (␀, NUL, \ 0) у sed?


15

Пов’язане з іншим питанням , щоб нечітко виявити бінарні файли, чи існує спосіб виявлення ␀ байтів sed?


У GNU sed, так, але зауважте, що у багатьох одиницях текстові програми не здатні обробляти нульові байти.
Жиль "ТАК - перестань бути злим"

Відповіді:


17

Приклад:

Доведіть, що я надсилаю байт NUL, а за ним новий рядок:

$ echo -e \\0 | hexdump -C
00000000  00 0a                                             |..|
00000002

Тепер я змінюю байт NUL на !знак оклику:

$ echo -e \\0 | sed 's/\x00/!/' | hexdump -C
00000000  21 0a                                             |!.|

Тож хитрість використовується \x00як NUL-байт.


3
Ви можете echo -ne \\0уникнути нового рядка.
l0b0

Замініть hexdump -Cна, uniname -bcepuщоб побачити, який персонаж скидає.
l0b0

6
Слід зазначити, що \xце нестандартне sedрозширення, але GNUsed це забезпечує.
jw013

6
Слід також зазначити, що echo -eце башизм . printfнабагато сумісніше.
jofel

7

Так, шаблон \x00відповідає нульовому байту.

Приклад:

$ printf "\0\n\0\n" > file
$ sed -e 's/\x00/test/' -i file
$ cat file
test
test
$  

@ l0b0: Причиною, чому це працювало на мене, було те, що я використовував zsh. Відповідно до POSIX , він замінюється \0нульовим байтом. Ця заміна не є необхідною ("має підтримуватися"), і фактично bash не підтримує її безпосередньо. Для цього потрібно використовувати echo -e. Я замінити echoз з printfв моїй обороні , який , здається, більш сумісними ...
jofel
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.