2009-09-14 35 views
37

Trên máy tính để bàn Linux (RHEL4) Tôi muốn trích xuất một loạt các byte (thường nhỏ hơn 1000) từ bên trong một tệp lớn (> 1 Gig). Tôi biết bù đắp vào tập tin và kích thước của đoạn.Làm cách nào để trích xuất một đoạn byte đơn lẻ từ bên trong một tệp?

Tôi có thể viết mã để thực hiện việc này nhưng có giải pháp dòng lệnh không?

Lý tưởng nhất, một cái gì đó như:

magicprogram --offset 102567 --size 253 <input.binary> output.binary 

Trả lời

62

Hãy thử dd:

lệnh
dd skip=102567 count=253 if=input.binary of=output.binary bs=1 
+0

Cảm ơn. Chính xác những gì tôi muốn. – DanM

+2

Tùy chọn thêm 'trạng thái = không' để ngăn chặn xuất ra stderr. – kenorb

+4

Dưới đây là ví dụ sử dụng bù trừ hex: 'dd if = in.bin bs = 1 status = none skip = $ ((0x88)) count = $ ((0x80)) of = out.bin'. – kenorb

3

Các dd có thể làm tất cả điều này. Nhìn vào các tham số tìm kiếm và/hoặc bỏ qua như một phần của cuộc gọi.

10

Đây là một câu hỏi cũ, nhưng tôi muốn thêm một phiên bản khác của lệnh dd được tốt hơn phù hợp cho phần lớn khu vực byte:

dd if=input.binary of=output.binary skip=$offset count=$bytes iflag=skip_bytes,count_bytes 

nơi $offset$bytes là những con số trong các đơn vị byte .

Sự khác biệt với câu trả lời được chấp nhận của Thomas là bs=1 không xuất hiện ở đây. bs=1 tạo ra kích thước khối đầu vào và đầu ra là 1 byte, điều này làm cho tốc độ này chậm đến mức khi số byte trích xuất lớn.

1

head + tail

Không chắc nó như thế nào so sánh với dd hiệu quả, nhưng nó là niềm vui:

printf "123456789" | tail -c+2 | head -c3 

chọn 3 byte, bắt đầu từ thứ 2 một:

234 

Xem thêm: https://stackoverflow.com/a/1272995/895245

Các vấn đề liên quan