Sed'deki boş baytları (␀, NUL, \ 0) tespit etmenin bir yolu var mı?


15

Başka bir soru ile ilgili olarak , ikili dosyaları belirsiz bir şekilde tespit etmek için, ␀ baytları tespit etmenin bir yolu var sedmı?


GNU sed'de evet, ancak birçok unice'de metin yardımcı programlarının boş baytları işleyemediğini unutmayın.
Gilles 'SO- kötü olmayı kes'

Yanıtlar:


17

Misal:

NUL baytı ve ardından yeni bir satır gönderdiğimi kanıtla:

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

Şimdi NUL baytını bir !ünlem işaretiyle değiştiriyorum:

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

Yani hile \x00NUL-bayt olarak kullanıyor .


3
Yeni echo -ne \\0bir satırdan kaçınabilirsiniz.
l0b0

Hangi karakteri döküldüğünü görmek için hexdump -Cile değiştirin uniname -bcepu.
l0b0

6
\xStandart olmayan bir seduzantı olduğu belirtilmelidir , ancak GNUsed bunu sağlar.
jw013

6
Ayrıca belirtilmelidir ki echo -e, bu bir bashizmdir . printfçok daha uyumludur.
jofel

7

Evet, desen \x00boş baytla eşleşir.

Misal:

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

@ l0b0: Benim için çalışmasının nedeni, zsh kullanmamdı. Göre POSIX'e , yerini aldığı \0sıfır bayt tarafından. Bu değiştirme gerekli değildir ("desteklenecektir") ve aslında bash doğrudan desteklemez. Bunun için kullanmanız gerekir echo -e. Ben daha uyumlu gibi görünüyor benim cevap echoile değiştirin printf...
jofel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.