강좌 & 팁
오래전 Windows의 조상격인 DOS시절부터 텍스트파일포맷은 유닉스의 그것과 달랐는데,
아직도 호환성(backward-compatibility)때문인지 통일되지 않고 있다.
DOS에서의 테스트의 한줄의 끝은 '\r' '\n' (또는 '\n' '\r')로 끝나도록 되어있다.
아마도 .txt포맷이라는 것을 '프린터의 입력물'로 생각한 것 같다.
'\r'는 carriage-return이라 불리는데 현재 줄의 커서를 제일 앞쪽(첫번째 칼럼)으로 옮기는 것이다.
'\n'는 line-feed라고 불리는데 현재 커서를 다음쪽 같은 칼럼으로 옮기는 것이다.
이 둘을 조합하면, 우리가 테스트 에디터에서 보는 '다음줄의 첫번째 칼럼'이 되는 것이다.
유닉스/리눅스에서는 초기시대부터 위와 같은 조합대신 한줄의 끝을 line-feed만으로 표현하였다.
ASCII문자표를 보면 프린터를 염두에 두고 고안한 코드들이 꽤 있는 것 같다. 하지만 시대가 흘러
이러한 문자코드나 조합은 과거의 화석이 되고 말았다.
수년전까지만해서 Windows에서 편집한 텍스트를 유닉스의 vim에서 열어보면, 줄 끝에 ^M와 같은 컨트롤문자가 보였었다.
지금은 ^M이 파일에 존재하더라도 그것이 보이지 않게끔 해 준다.
아직까지도 리눅스에서 편집한 텍스트파일을 Windows의 NotePad에서 보면, 모든 줄이 붙어서 보이게 된다.
2가지 포맷을 변환하기 위한 툴로서 dos2unix/unix2dos라는 것이 있다.
홈페이지는 'http://waterlan.home.xs4all.nl/dos2unix.html'이고 ubuntu에서 설치하기 위해서는 다음과 같이 한다.
sudo apt-get install dos2unix
사용법은 간단히,
dos2unix <dos-text-file>
unix2dos <unix-text-file>
이다.
여러가지 파일을 한꺼번에, 배치로 unix파일을 dos형식으로 바꾸기 위해서는,
반대로 dos형식을 unix형식으로 바꾸기 위해서는,
와 같이 사용한다.
위에서 사용한 xargs는 stdin에 받은 각각의 줄이 command arguments(argv[1], argv[2] ...)로 들어가게 한다.
예를 들면,
와 같이 사용할 수 있다.