[linux] 리눅스 tr 명령어 사용법

[linux] 리눅스 tr 명령어

[linux] 리눅스 tr 명령어

with CRLF line terminators error

두 개의 텍스트 파일을 비교하는데 겉으로 보기에는 모든 텍스트가 동일하게 보이는데 diff, cmp를 사용하면 자꾸 다르다고 말하는 경우가 있다.
diff의 여러 옵션을 사용해도 그 이유를 대체 알 수가 없을 때 cmp 명령어를 사용해본다.

cmp file1.txt file2.txt
// file1.txt file2.txt differ: char 33, line 1

위의 내용을 보면 line1의 char 33에서 다르다고 한다. 그런데 char33는 눈에 보이지 않는 뉴라인 문자뿐이다. 이 경우 개행 문자가 차이가 있는지를 의심해 볼 수 있다. Dos 에서는 \r\n으로 개행 문자를 표기하는 반면 linux에서는 \n으로 표기하기 때문이다. 이는 눈으로 보이는 텍스트 상으로는 절대 알 수 없으며 파일을 까보는 것이 가장 빠른 방법이다.

/usr/bin/file file1.txt
// file1.txt: ASCII text, with very long lines
/usr/bin/file file2.txt
// file2.txt: ASCII text, with very long lines, with CRLF line terminators

CRLF line terminator라는 추가 사항이 보인다. 즉 Dos 타입이라는 거다. 이 파일을 리눅스 형태 개행문자로 바꾸는 방법을 알아보자.

tr -d '\r' <file1.txt> linux_file1.txt

이제 두 개의 파일을 다시 비교해보면 같은 파일이란 걸 확인할 수 있다.

diff -s linux_file1.txt file2.txt
// Files linux_file1.txt and file2.txt are identical

댓글

이 블로그의 인기 게시물

[Linux, Unix] export, echo 명령어 알아보기

IEEE 754 부동 소수점 반올림과 근사