Gibt es eine Möglichkeit, Null-Bytes (␀, NUL, \ 0) in sed zu erkennen?

15

Gibt es im Zusammenhang mit einer anderen Frage , um Binärdateien unscharf zu erkennen, eine Möglichkeit, ␀ Bytes in zu erkennen sed?

l0b0
quelle
Ja, in GNU sed, aber beachten Sie, dass Text-Dienstprogramme auf vielen Unices keine Null-Bytes verarbeiten können.
Gilles 'SO- hör auf böse zu sein'

Antworten:

16

Beispiel:

Beweisen Sie, dass ich ein NUL-Byte sende, gefolgt von einer neuen Zeile:

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

Jetzt ändere ich das NUL-Byte in ein !Ausrufezeichen:

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

Also wird der Trick \x00als NUL-Byte verwendet.

jippie
quelle
3
Sie können echo -ne \\0einen Zeilenumbruch vermeiden.
l0b0
Ersetzen Sie hexdump -Cdurch, um uniname -bcepuzu sehen, welches Zeichen ausgegeben wird.
l0b0
6
Es sollte erwähnt werden, dass dies \xkeine Standarderweiterung ist sed, aber GNUsed bietet sie an.
JW013
6
Es sollte auch erwähnt werden, dass dies echo -eein Bashismus ist . printfist viel kompatibler.
Jofel
7

Ja, das Muster \x00stimmt mit dem Null-Byte überein.

Beispiel:

$ printf "\0\n\0\n" > file
$ sed -e 's/\x00/test/' -i file
$ cat file
test
test
$  
Jofel
quelle
@ l0b0: Der Grund, warum es bei mir funktioniert hat, war, dass ich zsh verwendet habe. Laut POSIX wird es \0durch das Null-Byte ersetzt. Dieser Ersatz ist nicht erforderlich ("wird unterstützt") und wird von bash nicht direkt unterstützt. Dafür müssen Sie verwenden echo -e. Ich ersetze echomit printfin meiner Antwort, die kompatibler zu sein scheint ...
Jofel