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)
'옥탑방주인 > -D' 카테고리의 다른 글
Windows 10에서 NFS 기능 사용하기 (0) | 2017.04.10 |
---|---|
매트랩(MATLAB) 버전 별 dll 파일과 MCR 버젼 (0) | 2017.03.28 |
kafka 에러 해결 (0) | 2017.01.31 |
ubuntu java8 간단한 설치법 (0) | 2017.01.31 |
raspberry pi3 에 onos install... (0) | 2017.01.25 |