파일에서 후행 CRLF를 제거하는 방법은 무엇입니까?

파일에서 후행 CRLF를 제거하는 방법은 무엇입니까?

뒤에 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

관련 정보