본문 바로가기

옥탑방주인/-D

논문작업을 하며...

3일간 열심히 밤새며 작업을 한 결과...


컴파일러의 에러가 항상 옳지 않다는 결과...(물론 코드가 잘못됫을 수 있다)


이번 이슈의 핵심은 운영체제간의 줄바꿈 문자(newline character)의 차이 때문에 input data에서 오류가 발생.


https://en.wikipedia.org/wiki/Newline 


리눅스의 줄바꿈 문자는 LF(\N) 이고

윈도우는 CRLF(\r\n) 이다.


LF와 CRLF의 풀 네임은

LF(Line Feed) , CR(Carriage Return)



1. 윈도우즈에서 변환


Pycharm : 파일 > 라인구분자(Line Separators)

Notepad++ : 편집 > 줄의 끝문자(EOF) 변환

EditPlus : 문서 > 파일형식 > 파일형식변경


2. Linux 환경에서 변환


find . -name '*.txt' -exec perl -pi -e 's/^M(ctrl + v + m)//g' {} \;

               파일확장자명 



=========================참조


지난 팁에서는 vi 에디터 내에서 ^M을 지우는 방법을 알아 보았습니다.

 

이번에는 디렉토리 안에 ^M이 들어 있는 파일이 많을 경우 모든 파일에서 또는 특정한 파일에서 ^M을 지우는 방법을 알아 보겠습니다.

 

명령어 find 를 사용합니다.

find는 리눅스에서 find [시작경로] [option] 의 형태로 사용합니다.

 

따라서 현재 디렉토리에서 검사를 하려면

 

find .

 

라고 하면 됩니다.

 

다음 옵션에서는 파일의 이름을 이용합니다.

 

find . -name '*.c'

 

라고 하면 현재 디렉토리의 확장자가 c 인 모든 파일을 찾습니다.

여기에서 하위 디렉토리를 검색하지 않으려면

 

find . -maxdepth 1 -name '*.c'

 

이렇게 하면 하위 디렉토리를 더이상 검색하지 않습니다.

물론 1을 2 또는 3으로 하면 하위 2단계 또는 3단계까지 검색 합니다.

 

find . -maxdepth 1 -name '*.c' -o -name '*.h'

 

이렇게 하면 확장자가 c 또는 h 인 파일을 모두 검색 합니다.

 

이렇게 ^M 을 제거할 파일을 찾은 다음 명령을 실행 합니다.

 

find 명령어에는 추가 명령어를 실행 할 수 있습니다.

추가 명령으로는 perl 을 사용할 것입니다.

perl은 /usr/bin 안에 있는 리눅스의 외부명령어 입니다.

 

perl의 용법에 대한 설명은 생략 하겠습니다.

find에서 perl 을 추가로 실행 하려면

-exec 옵션을 주면 됩니다.

 

find . -maxdepth 1 -name '*.c' -o -name '*.h'  -exec perl -pi -e 's/^M//g' {} \;

 

이와 같이 하면 현재의 디렉토리 내에 확장자가 c 또는 h 인 파일의 ^M 이 모두 지워집니다.

^M 은 ctrl+v+m 으로 타이핑 하여야 합니다.

(http://forum.falinux.com/zbxe/index.php?document_srl=531109&mid=note)