Cách chỉ lấy mười byte đầu tiên của tệp nhị phân


80

Tôi đang viết một tập lệnh bash cần lấy tiêu đề (10 byte đầu tiên) của một tệp và sau đó trong phần khác lấy mọi thứ ngoại trừ 10 byte đầu tiên. Đây là các tệp nhị phân và có thể sẽ có \0's và \n' trong suốt 10 byte đầu tiên. Có vẻ như hầu hết các tiện ích đều hoạt động với các tệp ASCII. Cách tốt để đạt được nhiệm vụ này là gì?


1
Đối với bất cứ ai có nhu cầu đầu ra hex xem câu trả lời này unix.stackexchange.com/a/10882/103618
Alwin Kesler

Câu trả lời:


144

Để nhận 10 byte đầu tiên, như đã lưu ý:

head -c 10

Để lấy tất cả trừ 10 byte đầu tiên (ít nhất với GNU tail):

tail -c+11

3
Đúng. Tôi thích ddý tưởng này nhưng tùy chọn này không yêu cầu thay đổi kích thước bộ đệm nên nó hoạt động tốt với các tệp lớn. Cảm ơn.
User1

42

head -c 10 làm điều đúng đắn ở đây.


9
Thật thú vị khi câu trả lời này là câu đầu tiên, nó đúng, nhưng những câu khác có nhiều ủng hộ hơn nhiều.
robert

34

Bạn có thể sử dụng ddlệnh để sao chép một số byte tùy ý từ tệp nhị phân.

dd if=infile of=outfile1 bs=10 count=1
dd if=infile of=outfile2 bs=10 skip=1

1
Điều này hoạt động nhưng nó khá chậm. Bs của 10 đang giết những tập tin khổng lồ này. Có cách nào nhanh hơn để bỏ qua mười byte đầu tiên không? Nó có vẻ đơn giản như vậy.
User1

dd không đáng tin cậy. Nó có thể đọc ít byte hơn yêu cầu vì nhiều lý do khác nhau.
thúc

@ceving bạn có thể đề cập đến ít nhất một trong những lý do đó không? Tôi không chắc là tôi tin bạn.
Mark Ransom

Ví dụ sau in 1 thay vì 2:{ printf a; sleep 1; printf b; } | dd bs=2 count=1 2>/dev/null | wc -c
ngừng hoạt động

Lời giải thích ở đâyở đây
thúc
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.