2010-04-10 13 views
146

Làm cách nào để tạo một chưa sửa đổi kết xuất hex của tệp nhị phân trong Linux bằng cách sử dụng bash? Các lệnh odhexdump đều chèn dấu cách vào vùng đổ và điều này không lý tưởng.Làm cách nào để tạo một tệp hex chứa tệp chỉ chứa các ký tự hex không có dấu cách trong bash?

Có cách nào để viết một chuỗi dài với tất cả các ký tự hex, dấu cách hoặc dòng mới trong đầu ra không?

+0

Xem thêm: [Cách in chỉ các giá trị hex từ hexdump không có số dòng hoặc bảng ASCII?] (Https://stackoverflow.com/questions/15553493/how-to -print-only-the-hex-values-from-hexdump-without-line-number-hoặc-ascii-tabl) – 0x90

Trả lời

19

Dường như phụ thuộc vào chi tiết của phiên bản od. Trên OSX, sử dụng này:

od -t x1 -An file |tr -d '\n ' 

(.. Đó là in như byte kiểu hex, không có địa chỉ và khoảng trắng xóa sau đó, tất nhiên)

+1

Tùy chọn POSIX duy nhất cho đến nay. Nên làm việc ở bất cứ đâu. –

199

xxd -p file

Hoặc nếu bạn muốn nó tất cả trên một dòng duy nhất:

xxd -p file | tr -d '\n'

+9

fyi Để đảo ngược quy trình: tệp xxd -r -ps hexascii.txt (có thể có hoặc không có dòng mới) –

8

Perl one-liner:

perl -e 'local $/; print unpack "H*", <>' file 
+0

Đã xác minh. Khớp với "xxd -p file | tr -d '\ n'". –

+1

fyi Để đảo ngược quá trình: perl -e 'local $ /; gói in "H *", <> ' tập tin –

+0

"địa phương $ /" là không cần thiết. –

62

Format chuỗi có thể làm cho hexdump cư xử chính xác như bạn muốn nó (không khoảng trắng ở tất cả, byte bởi byte):

hexdump -ve '1/1 "%.2x"' 

1/1 có nghĩa là "mỗi định dạng được áp dụng một lần và phải mất một byte", và "%.2x" là chuỗi định dạng thực tế, như trong printf. Trong trường hợp này: số thập lục phân 2 ký tự, số 0 đứng đầu nếu ngắn hơn.

+7

Bạn cần một '-v' hoặc nó sẽ thả các byte lặp lại và thay thế chúng bằng một dấu hoa thị. –

+0

Vâng, đúng vậy, tôi đã bỏ lỡ nó. –

+1

Tôi tự hỏi liệu bản thân hexdump có thể nối thêm dòng mới (chỉ) vào cuối đầu ra không .. (phần phụ của '; echo' làm cho nó không thể dùng làm bí danh bash) – mykhal

2

Các câu trả lời khác là thích hợp hơn, nhưng đối với giải pháp Bash thuần túy, tôi đã sửa đổi tập lệnh trong my answer here để có thể xuất ra dòng liên tục các ký tự hex biểu thị nội dung của tệp. (Chế độ bình thường của nó là để mô phỏng hexdump -C.)

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