파일의 시작과 끝에서 바이트를 어떻게 자르나요?

파일의 시작과 끝에서 바이트를 어떻게 자르나요?

파일의 시작 부분과 끝 부분에 휴지통(이진 머리글 및 바닥글)이 있는 파일이 있습니다. 이 바이트를 핵으로 만드는 방법을 알고 싶습니다. 예를 들어 처음부터 25바이트를 가정해보자. 그리고 끝에서 2바이트입니다.

truncate와 dd를 사용할 수 있다는 것을 알고 있지만 truncate는 스트림에서 작동하지 않으며 하드 파일에서 두 개의 명령을 실행하는 것이 다소 어색해 보입니다. truncate파일의 크기를 알고 파일 을 dd. 아니면 더 좋은 방법이 있다면?

답변1

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

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

26바이트에서 시작하여 끝에서 file2바이트(마이너스 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따라서 위에서는 표시할 부분의 길이를 할당 $n하고 파일 내에서 25바이트를 검색합니다.
  • <>;명령이 성공하면 열기 읽기+쓰기 모드 및 자르기 리디렉션 연산자입니다.

관련 정보