Apakah ada cara untuk mendeteksi byte nol (␀, NUL, \ 0) secara sed?


15

Terkait dengan pertanyaan lain , untuk mendeteksi file biner, apakah ada cara untuk mendeteksi ␀ byte sed?


Di GNU sed, ya, tetapi perhatikan bahwa pada banyak unix, utilitas teks tidak mampu menangani byte nol.
Gilles 'SO- stop being evil'

Jawaban:


17

Contoh:

Buktikan saya mengirim byte NUL, diikuti oleh baris baru:

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

Sekarang saya mengubah byte NUL ke !tanda seru:

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

Jadi triknya gunakan \x00sebagai NUL-byte.


3
Anda dapat echo -ne \\0menghindari garis baru.
l0b0

Ganti hexdump -Cdengan uniname -bcepuuntuk melihat karakter mana yang dibuangnya.
l0b0

6
Harus disebutkan bahwa itu \xadalah sedekstensi non-standar , tetapi GNUsed memang menyediakannya.
jw013

6
Hal ini juga harus disebutkan harus, yang echo -emerupakan bashism . printfjauh lebih kompatibel.
jofel

7

Ya, polanya \x00cocok dengan byte nol.

Contoh:

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

@ l0b0: Alasannya, mengapa itu bekerja untuk saya, adalah karena saya menggunakan zsh. Menurut POSIX , itu menggantikan \0dengan byte nol. Penggantian ini tidak diperlukan ("harus didukung"), dan sebenarnya bash tidak mendukungnya secara langsung. Untuk itu, Anda perlu menggunakan echo -e. Saya ganti echodengan dengan printfjawaban saya yang tampaknya lebih kompatibel ...
jofel
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.