Làm cách nào để tạo tệp kết xuất hex của tệp chỉ chứa các ký tự hex không có khoảng trắng trong bash?


188

Làm cách nào để tạo một kết xuất hex chưa sửa đổi của tệp nhị phân trong Linux bằng bash? Cả odhexdumplệnh đều chèn khoảng trắng vào kết xuất và điều này không lý tưởng.

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


Câu trả lời:


250

xxd -p file

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

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


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

92

Các chuỗi định dạng có thể làm cho hexdump hoạt động chính xác như bạn muốn (hoàn toàn không có khoảng trắng, từng byte một):

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

1/1có nghĩa là "mỗi định dạng được áp dụng một lần và 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ự, các số 0 đứng đầu nếu ngắn hơn.


7
Bạn cần một -vhoặc nó sẽ bỏ các byte lặp đi lặp lại và thay thế chúng bằng dấu hoa thị.
Tạm dừng cho đến khi có thông báo mới.

2
Tôi tự hỏi nếu hexdump tự nó có thể nối dòng mới (chỉ) vào cuối đầu ra .. (phần phụ rõ ràng ; echolàm cho nó không thể sử dụng như bí danh bash)
mykhal

2
Bí danh của tôi:alias to_hex="hexdump -ve '1/1 \"%.2x\"' && echo"
dành cho

Số lần lặp và số byte mặc định là một, do đó 1/1 có thể bị bỏ qua, để lạihexdump -ve '"%.2x"'
Alex Che

@mykhal, điều đó là có thể, nếu bạn biết số lượng byte trong đầu ra. Giả sử nếu bạn sử dụng hexdump để chỉ xuất 13 byte đầu tiên:hexdump -n 13 -e '13/1 "%.2x" "\n"'
Alex Che

24

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

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

(Tất nhiên, đó là in các byte hex loại, không có địa chỉ. Và tất nhiên khoảng trắng bị xóa sau đó.)


1
Tôi cũng sẽ thêm -vvào trong bối cảnh này, nếu không nó bỏ qua lặp lại với *.
Ciro Santilli 郝海东 冠状 病 事件 法轮功

10

Perl một lớp lót:

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

Đã xác minh. Khớp "tập tin xxd -p | tr -d '\ n'".
Curtis Yallop

1
fyi Để đảo ngược quá trình: perl -e 'local $ /; tệp in gói "H *", <> '<hexascii.txt>
Curtis Yallop

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

Cập nhật bình luận cuối cùng: "local $ /" là không cần thiết cho "pack". Để giải nén, bạn cần nó nhưng có thể thay thế "undef $ /". $ / là dấu phân cách dòng (NL mặc định). không xác định đặt nó vào chế độ bùn. Vì vậy, <> được tham chiếu trong ngữ cảnh chuỗi kéo toàn bộ tệp nhị phân mà không phân tích cú pháp thành dòng.
Curtis Yallop

Hình thức thay thế: perl -e 'in giải nén "H *", tham gia ("", <>)' <file
Curtis Yallop

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.