มีวิธีในการตรวจสอบ null bytes (␀, NUL, \ 0) ใน sed หรือไม่?


15

เกี่ยวข้องกับคำถามอื่นเพื่อตรวจจับไฟล์ไบนารีที่คลุมเครือมีวิธีตรวจจับ␀ไบต์sedหรือไม่


ใน GNU sed ใช่ แต่โปรดทราบว่าในหลาย ๆ ยูทิลิตี้ text text ไม่สามารถจัดการกับ null null ได้
Gilles 'หยุดความชั่วร้าย'

คำตอบ:


17

ตัวอย่าง:

พิสูจน์ว่าฉันส่ง NUL ไบต์ตามด้วยบรรทัดใหม่:

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

ตอนนี้ฉันเปลี่ยน NUL ไบต์เป็น!เครื่องหมายอัศเจรีย์:

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

ดังนั้นเคล็ดลับที่ใช้\x00เป็น NUL-byte


3
คุณสามารถecho -ne \\0หลีกเลี่ยงการขึ้นบรรทัดใหม่
l0b0

แทนที่hexdump -Cด้วยuniname -bcepuเพื่อดูว่าอักขระตัวใดที่ทิ้ง
l0b0

6
ควรกล่าวถึงว่า\xเป็นsedส่วนขยายที่ไม่ได้มาตรฐานแต่GNUsedจัดเตรียมไว้ให้
jw013

6
มันควรจะกล่าวยังว่าecho -eเป็นbashism printfเข้ากันได้มากขึ้น
jofel

7

ใช่รูปแบบ\x00ตรงกันกับไบต์ว่าง

ตัวอย่าง:

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

@ l0b0: เหตุผลว่าทำไมมันถึงได้ผลสำหรับฉันคือฉันใช้ zsh ตามPOSIXจะแทนที่\0ด้วยศูนย์ไบต์ การเปลี่ยนนี้ไม่จำเป็น ("ได้รับการสนับสนุน") และจริง ๆ แล้วทุบตีไม่สนับสนุนโดยตรง echo -eคุณก็จำเป็นต้องใช้ ฉันแทนที่echoด้วยกับprintfในคำตอบของฉันซึ่งดูเหมือนจะเข้ากันได้มากขึ้น ...
jofel
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.