bash에 공백없이 16 진수 문자 만 포함하는 16 진수 덤프 파일을 만드는 방법은 무엇입니까?


188

어떻게 수정되지 않은bash를 사용하여 Linux에서 바이너리 파일 16 진 덤프를odhexdump명령 덤프 모두 삽입 공간이는 적합하지 않습니다.

출력에 모든 16 진수 문자, 공백 또는 줄 바꿈이있는 긴 문자열을 작성하는 방법이 있습니까?


답변:


250

xxd -p file

또는 한 줄로 모든 것을 원한다면 :

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


13
fyi 프로세스를 되돌리려면 : xxd -r -ps hexascii.txt 파일 (개행 문자 유무에 관계없이)
Curtis Yallop

92

형식 문자열을 사용하면 16 진수 덤프가 원하는대로 정확하게 동작 할 수 있습니다 (공백 없음, 바이트 단위).

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

1/1"각 형식은 한 번 적용되고 1 바이트가 걸립니다"를 의미 "%.2x"하며 printf와 같이 실제 형식 문자열입니다. 이 경우 : 2 자리 16 진수, 더 짧은 경우 앞에 0.


7
a가 필요 -v하거나 반복되는 바이트를 삭제하고 별표로 바꿉니다.
추후 공지가있을 때까지 일시 중지되었습니다.

2
16 진 덤프 자체가 (명백한 부속 출력의 끝에 줄 바꿈 (만) .. 추가 할 수 있는지 궁금해 ; echo불가능 bash는 별칭으로 사용 할 수 있습니다)
mykhal

2
내 별명 :alias to_hex="hexdump -ve '1/1 \"%.2x\"' && echo"
devstuff

반복 횟수와 바이트 수는 기본적으로 1로 설정되므로 1/1은 생략해도됩니다.hexdump -ve '"%.2x"'
Alex Che

@mykhal, 출력의 바이트 수를 알고 있다면 가능합니다. hexdump를 사용하여 첫 번째 13 바이트 만 출력한다고 가정 해보십시오.hexdump -n 13 -e '13/1 "%.2x" "\n"'
Alex Che

24

의 버전의 세부 사항에 의존하는 것 같습니다 od. OSX에서는 다음을 사용하십시오.

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

(주소가없는 16 진수 바이트 유형으로 인쇄됩니다. 물론 공백은 나중에 삭제됩니다.)


1
-v이 맥락에서 추가 할 것 입니다 *. 그렇지 않으면와 반복을 건너 뜁니다 .
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

10

펄 원 라이너 :

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

확인되었습니다. "xxd -p 파일 | tr -d '\ n'"과 일치합니다.
커티스 얄롭

1
fyi 프로세스를 되돌리려면 : perl -e 'local $ /; 인쇄 팩 "H *", <> '<hexascii.txt> 파일
Curtis Yallop

"로컬 $ /"는 불필요합니다.
커티스 얄롭

마지막 코멘트로 업데이트 : "pack"에는 "local $ /"가 필요하지 않습니다. 압축을 풀려면 필요하지만 "undef $ /"를 넣을 수 있습니다. $ /는 줄 구분 기호입니다 (기본 NL). undefined는 slurp 모드에 놓입니다. 따라서 문자열 컨텍스트에서 참조되는 <>는 전체 이진 파일을 파싱하지 않고 전체 파일을 가져옵니다.
커티스 얄롭

다른 형태 : perl -e 'print unpack "H *", join ( "", <>)'<file
Curtis Yallop

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.