bash에 공백 없이 16진수 문자만 포함된 파일의 16진수 덤프를 만드는 방법은 무엇입니까?
bash를 사용하여 Linux에서 이진 파일의 수정되지 않은 16진수 덤프를 만들려면 어떻게 해야 합니까?그od
그리고.hexdump
명령은 둘 다 덤프에 공백을 삽입하며 이는 이상적이지 않습니다.
출력에서 공백이나 줄을 뺀 모든 16진수 문자로 긴 문자열을 간단하게 작성하는 방법이 있습니까?
xxd -p file
또는 모든 것을 한 줄로 연결하려는 경우:
xxd -p file | tr -d '\n'
형식 문자열은 hexdump가 원하는 대로 동작하도록 만들 수 있습니다(흰색 공간이 전혀 없음, 바이트별로).
hexdump -ve '1/1 "%.2x"'
1/1
는 "각한 번 되어 한 뜻이고, 즉, " 형식은한한바소요이다니됩가트각고적되용번."다니소"▁is▁means됩요,▁",가"라는 뜻입니다."%.2x"
는 printf에서와 같이 실제 형식 문자열입니다.이 경우: 2자 16진수, 더 짧으면 선행 0입니다.
의 버전의 세부 사항에 따라 달라지는 것 같습니다.od
OSX에서 다음을 사용합니다.
od -t x1 -An file |tr -d '\n '
(주소 없이 16진수 형식으로 인쇄됩니다.그리고 물론 이후에 공백이 삭제되었습니다.)
Perl 한 줄기:
perl -e 'local $/; print unpack "H*", <>' file
다른 답변이 바람직하지만 순수한 Bash 솔루션의 경우 파일의 내용을 나타내는 16진수 문자의 연속 스트림을 출력할 수 있도록 답변의 스크립트를 수정했습니다. (일반 모드는 에뮬레이트함)hexdump -C
.)
이 가장 버전이라고 정의된 POSIX만 ).tr
그리고.od
동작):
cat "$file" | od -v -t x1 -A n | tr -d ' \n'
이 기능은 다음과 같습니다.od
각과 반되진는바이건않 16수다니인쇄합각.tr
출력의 모든 공백 및 라인 피드를 삭제합니다. (으)로 표시됩니다. (으)로 표시됩니다.cat
는 다중 으로 사용됩니다.cat
시스템을 동안에는 파일 을 기다릴 수 .od
이전에 읽은 부품을 아직 처리 중입니다.을 " 일코사이는다를교수체있다할습니로음으단용자어다있니▁single습▁want▁that▁may▁replace▁with단일▁users▁core수교체할"로 바꾸기를 원할 수도 있습니다.< "$file" od ...
하나의 추가 프로세스를 시작하는 것을 저장합니다.
tldr;
$ od -t x1 -A n -v <empty.zip | tr -dc '[:xdigit:]' && echo
504b0506000000000000000000000000000000000000
$
설명:
을 합니다.od
바이트를 (16진수 16진수)-t x1
오프셋 () --- 주소 오프셋 없음()-A n
반복되는 "을 하지 않고 ) 및반되그 "그룹" 하지피을않고는룹복▁)않고그을▁el지▁and(-v)
empty.zip
표준 입력으로 리디렉션되었습니다.을 로연결프이에 파이프로 합니다.tr
것(으)-d
() 보어(()-c
의 16진수 집합16진수 문자 집합( )'[:xdigit:]'
을 인쇄할 수 .echo
프롬프트를 출력과 다음 셸 프롬프트를 구분하기 위해 여기서 수행한 것처럼.
참조:
- https://pubs.opengroup.org/onlinepubs/9699919799/utilities/od.html
- https://pubs.opengroup.org/onlinepubs/9699919799/utilities/tr.html
이 코드는 "순수한" 16진수 덤프 문자열을 생성하며 지정된 다른 모든 예제보다 더 빠르게 실행됩니다.이진수 0으로 채워진 1GB 파일과 모든 라인 피드에서 테스트되었습니다.데이터 콘텐츠에 종속되지 않으며 줄 대신 1MB 레코드를 읽습니다.
perl -pe 'BEGIN{$/=\1e6} $_=unpack "H*"'
수십 번의 타이밍 테스트를 통해 1GB 파일의 경우 아래와 같은 다른 방법이 더 느리다는 것을 알 수 있습니다.모든 테스트는 파일에 출력을 기록하고 체크섬으로 확인한 후 실행되었습니다.3개의 1GB 입력 파일(모든 바이트, 모든 이진 0 및 모든 LF)이 테스트되었습니다.
hexdump -ve '1/1 "%.2x"' # ~10x slower
od -v -t x1 -An | tr -d "\n " # ~15x slower
xxd -p | tr -d \\n # ~3x slower
perl -e 'local \$/; print unpack "H*", <>' # ~1.5x slower
- this also slurps the whole file into memory
프로세스를 되돌리려면:
perl -pe 'BEGIN{$/=\1e6} $_=pack "H*",$_'
Python은 다음과 같은 용도로 사용할 수 있습니다.
python -c "print(open('file.bin','rb').read().hex())"
...어디에file.bin
파일 이름입니다.
설명:
- 열다.
file.bin
에rb
(2진수 읽기) 모드입니다. - 내용 읽기(다음과 같이 반환됨)
bytes
반대). - 사용하다
bytes
방법.hex()
공백이나 새 줄 없이 16진수 덤프를 반환합니다. - 출력을 인쇄합니다.
언급URL : https://stackoverflow.com/questions/2614764/how-to-create-a-hex-dump-of-file-containing-only-the-hex-characters-without-spac
'programing' 카테고리의 다른 글
"아니..."아무것도 아니야" 대 "...아무 것도 아닙니다. (0) | 2023.05.19 |
---|---|
jQuery를 사용하여 요소 유형 찾기 (0) | 2023.05.19 |
VB.NET의 정수에 아무것도 할당할 수 없는 이유는 무엇입니까? (0) | 2023.05.19 |
C#에서 어레이를 비교하는 가장 쉬운 방법 (0) | 2023.05.19 |
SQLite 데이터베이스에 한 번에 여러 행을 삽입할 수 있습니까? (0) | 2023.05.19 |