파일의 시작과 끝에서 바이트를 제거하는 방법은 무엇입니까?

파일의 시작과 끝에서 바이트를 제거하는 방법은 무엇입니까?

파일의 시작 부분과 끝 부분에 쓰레기(이진 머리글 및 바닥글)가 있는 파일이 있습니다. 이 바이트를 공격하는 방법을 알고 싶습니다. 예를 들어 처음부터 25바이트가 있다고 가정해보자. 그리고 끝에서 2바이트입니다.

truncate와 dd를 사용할 수 있다는 것을 알고 있지만 truncate는 스트림에서 작동하지 않으며 하드 파일에서 두 개의 명령을 실행하는 것이 약간 다루기 힘든 것 같습니다. truncate파일의 크기를 알면서 파일을 다른 파일로 전송할 수 있다면 어떻게 될까요 dd? 아니면 더 좋은 방법이 있을까요?

답변1

GNU와 결합할 수 있습니다.tail그리고head:

tail -c +26 file | head -c -2

file출력은 바이트 26에서 시작하고 -2끝(마이너스 2) 전 2바이트에서 중지됩니다. ( -c작업은 문자가 아닌 바이트에서 작동합니다.)

답변2

DD이 두 가지 작업은 단일 명령으로 수행됩니다. 블록 크기를 1바이트로 설정하고 처음 25바이트를 건너뛰고 건너뛰기 및 끝 바이트를 뺀 파일 크기를 계산합니다.

100 byte file
file.img

dd if=./file.img of=./trimed_file.img bs=1 skip=25 count=73

숫자는 0부터 세기 시작하므로 주의 깊게 확인하세요.

답변3

ksh93 사용:

{ head -c "$n"; } < file <#((n = EOF - 25 - 2 , 25))

아니면 그 자리에서 하세요:

{ head -c "$n"; } < file <#((n = EOF - 25 - 2 , 25)) 1<>; file

당신 /opt/ast/bin이 당신보다 앞서 있다면 내장된 기능을 $PATH얻게 될 것입니다 .head

  • <#((...))운영자 입니다 lseek(). 는 파일의 길이인 ...산술식으로 해석됩니다 . 따라서 위에서는 파일에서 EOF표시할 부분의 길이를 25바이트로 지정했습니다 .$n
  • <>;읽기+쓰기 모드에서 열리고 명령 성공 시 잘리는 리디렉션 연산자입니다.

관련 정보