Windows 또는 Unix 라인 종료로 파일을 빠르게 식별 할 수 있습니까? dos2unix 윈도우와 유닉스 라인

나는 우리가 사용할 수 있음을 안다. dos2unix 윈도우와 유닉스 라인 종료 사이에 변환합니다. 파일에 Windows 또는 Unix 라인 터미네이션이 있는지 알려줄 수있는 명령이 있는지 궁금합니다.



답변

$ file f1 f2 f3
f1: ASCII text, with CRLF, LF line terminators
f2: ASCII text, with CRLF line terminators
f3: ASCII text

파일의 모든 행을 검사해야한다고 생각되면 다음을 수행 할 수 있습니다.

$ grep -c "^M" f1 f2
f1:0
f2:3

$ wc -l f1 f2
 3 f1
 3 f2
 6 total

“^ M”은 Ctrl + V Ctrl + M을 사용하여 입력되었으며 ASCII 캐리지 리턴 (CR) 문자입니다.

여기서 우리는 f1 파일에는 세 줄이 있지만 CR은 없으므로 모든 줄 끝은 Unix 스타일의 솔로 LF이어야합니다.

파일 f2에는 동일한 수의 행과 CR이 있으므로 MSDOS 및 Windows에서 사용되는 CR, LF 행 끝을 사용한다고 추측하는 것이 타당합니다.


답변

Windows에서는 메모장에서 파일을 여는 것이 가장 빠른 방법입니다. 메모장은 Windows 스타일 종료 (CR + LF)에서만 줄 바꿈을 표시하고 유닉스 종료 (LF)는 표시하지 않습니다. 그래서 유닉스 텍스트는 다음과 같이 보일 것이다.

Line1Line2Line3Line4

반면, windows 텍스트는 다음과 같습니다.

line1
line2
line3
line4

나는 유닉스 / 리눅스 플랫폼에 익숙하지 않지만 gedit 나 emacs 같은 프로그램으로 비슷한 해킹을 사용할 수 있다고 확신한다.


답변

c=($(perl -0777ne 'print $_ =~ tr/\n//; print " ";
                   print $_ =~ tr/\r//;'))
if   ((!(c[0] +   c[1]))) ;then echo no line endings
elif ((  c[0] && !c[1] )) ;then echo LF
elif (( !c[0] &&  c[1] )) ;then echo CR
elif ((  c[0] ==  c[1] )) ;then echo CRLF
else echo "anbigious LF ${c[0]} CR ${c[1]}"
fi

참고로, 속도면에서 보면 개인 \r 모래 \n s는 계산되지만 두 형식의 수는 같지만 Windows CRLF 파일이 아닌 꽤 괴상한 파일입니다 …

또한 * nix 도구 file 파일의 전체 스캔을하지는 않지만 perl 스크립트 않습니다. 어떤 플랫폼을 실행하고 싶지는 언급하지 않았습니다. 나는 사용했다. bash perl의 출력을 테스트하는 스크립트이지만 Window로 변경할 수 있습니다 cmd 스크립트.

파일을 파이프로 연결할 수 있습니다.