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.