카테고리 없음

(linux) 윈도우 문서의 개행문자 없애기

미친토끼 2025. 1. 31. 15:52

* 윈도우에서 작성한 문서에는 CR/LF 즉 \r\n(0D 0A)가 행 마지막에 붙게 되는데, 이 0D 문자 때문에 이 스크립트를 리눅스에서 돌릴 경우, 오작동하는 경우가 있다. 윈도우 문서/스크립트/소스를 리눅스로 가져올 경우에는,
1)
cat 소스.py
을 하여 출력된 것을 마우스로 긁어 저장하는 방법이 있고. (라인이 적은 경우에 가능)

2) vi -b 소스.py
바이너리 모드로 열면, \r이 ^M으로 나타나는데, 이것을 Ctrl+v, Ctrl+M 을 눌러 ^M을 입력하여 아래와 같이 replace한다.
:%s/^M//

3) 'dos2unix'라는 변환 명령 사용하기

 

dos2unix myscript.sh

4) tr 명령어 사용하기

tr -d "\r" < myscript.sh > myscript_new.sh

 

도스 파일에서 캐리지 리턴 '\r'을 찾아서 지워서 stdout 으로 출력하는데 그것을 새 파일로 갈무리한다.

 

5) awk 사용하기

awk '{sub(/\r$/, "")}; echo $0' myscript.sh  > new.sh

 

6) sed 사용하기

sed 's/\r//' myscript.sh  > new.sh

 

7) 아래의 파이썬 프로그램을 사용하여 '\r'을 없앤다. 도스 파일을 rb 모드로 읽어서 16진수 0D 0A 문자(\r\n)를 찾아서 0A 문자(\n)로 바꾸는 것이다. 도스 파일을 지우고 같은 파일명에 변환 파일을 저장하므로, 도스 파일을 백업해놓으면 좋다.

 

사용법: python dos2linux myscript.sh

#!/bin/python3

#filename : dos2linux
#usage: dos2linux file_to_remove_cr
#copyright: public domain
# writer: madrabbit7골뱅naver.com

import sys
import os

MV_COMMAND = "/usr/bin/mv -rf "
RM_COMMAND = "/usr/bin/rm -rf "

def _dos2linux(infile):
    f = open(infile, 'rb');
    modified = f.read().replace(b"\x0d\x0a", b"\x0a")
    f.close()
#    os.system(RM_COMMAND + infile)

    f = open(infile, 'wb')
    f.write(modified)
    f.close();

#new_filename = "_" + sys.argv[1]

_dos2linux(sys.argv[1])