뒤에 CRLF(총 2바이트)가 있는 바이너리 파일이 있는데 이를 제거하고 싶습니다. 어떻게 해야 하나요? 저는 busybox를 사용하고 있지만 Perl은 사용하지 않습니다.
답변1
ls
일반적인 BusyBox 설치의 경우 크기를 얻으려면 출력을 구문 분석해야 한다고 생각합니다 . 크기를 결정한 후 .을 사용하여 파일의 처음 n-2바이트를 추출합니다 head
.
size=$(ls -Lnd -- "$file" | awk 'NR==1 {print $5}')
head -c "$(($size - 2))" <"$file" >"$file.new"
파일을 제자리에서 자르려면 를 사용하십시오 dd
.
size=$(ls -Lnd -- "$file" | awk 'NR==1 {print $5}')
dd if=/dev/null of="$file" bs="$(($size - 2))" seek=1
답변2
파일 크기에서 2를 뺀 값을 구합니다. 당신은 $n
(예를 들어 n=$(wc -c < the-file)
)을 얻고 실행
dd bs=1 seek="$n" < /dev/null of=the-file
또는 truncate
음수 오프셋(파일 끝에서의 오프셋을 의미)을 지원하는 경우:
truncate -s -2 the-file
또는 다음을 사용하여 ksh93
:
: 1<>; the-file >#((EOF-2))
(이것은 성공할 경우 명령(여기)이 반환되고 find 연산자인 후 파일을 자르는 <>;
표준 리디렉션 연산자의 특수한 형식입니다 .<>
:
>#((...))
답변3
tr -d '\013' < input > output