Esiste un modo per rilevare byte null (␀, NUL, \ 0) in sed?


Risposte:


17

Esempio:

Dimostra che sto inviando un byte NUL, seguito da una nuova riga:

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

Ora cambio il byte NUL in un !punto esclamativo:

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

Quindi il trucco sta usando \x00come byte NUL.


3
È possibile echo -ne \\0evitare una nuova riga.
l0b0

Sostituisci hexdump -Ccon uniname -bcepuper vedere quale personaggio scarica.
l0b0

6
Va detto che \xè sedun'estensione non standard , ma GNUsed lo fornisce.
jw013,

6
Va anche menzionato, questo echo -eè un bashismo . printfè molto più compatibile.
jofel,

7

Sì, il modello \x00corrisponde al byte null.

Esempio:

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

@ l0b0: la ragione per cui ha funzionato per me è che ho usato zsh. Secondo POSIX , sostituisce \0con il byte zero. Questa sostituzione non è necessaria ("deve essere supportata") e in realtà bash non la supporta direttamente. Per questo, è necessario utilizzare echo -e. Sostituisco echocon con printfnella mia risposta che sembra essere più compatibile ...
jofel il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.