OS (운영체제)/리눅스

[Linux] Linux에서 Windows의 캐리지 리턴(개행) 문자 없애기

뜽배 2024. 6. 17. 18:28
728x90
반응형


1. 원인


윈도우에서 작성된 파일을 Unix/Linux계열에서 vi로 열었을 때 '^M' 섞여 있는 경우가 있다.

이는 캐리지 리턴(Carriage Return)이란 문자이고 커서를 제일 앞으로 이동시킨다는 의미가 있습니다. 
윈도우에서는 사실상 개행 즉 Enter동작을 통해 줄 바꿈을 해주는 것인데. Unix/Linux계열로 이동하면서 '^M' 이 문자가 찍혀있게 된다.

 

 

2. 해결방안


2-1. sed 명령어 사용


sed명령어를 사용해서 '^M'문자를 제거할 수 있다.

# sed -i 's/\r//' 파일이름
sed -i 's/\r//' test1.log


sed 명령어는 텍스트 파일을 한 줄 씩 처리하면서 명령을 적용할 수 있는 툴이다.

* sed : sed 명령어를 호출한다.
* -i : 원본 파일을 수정하겠다는는 옵션 (이 옵션이 없으면 변경사항이 화면에만 출력될 뿐 원본 파일은 수정되지 않는다)
* 's/\r//' : s는 대체(substitute)의 의미로 '\r'을 찾아서 대체하라는 의미이다.

  - s : 대채를 의미함
  - / : 구분자이며 대체할 패턴과 대체할 문자열을 구분하는 역할을 한다.
  - \r : 캐리지리턴 문자를 의미한다 '^M'은 '\r'로 표현한다.
  - // : 대체한 문자열이 없는 경우 이다. 만약 'A'라는 문자열로 대체한다고 하면 /A/ 라고 지정해주면 된다
 )

* 파일이름 : 대상 파일을 지정한다.


2-2. tr 명령어 사용


tr명령어를 사용해서 '^M'문자를 제거할 수 있다.

# tr -d '\r' < 원본파일 > 변환된 파일
tr -d '\r' < test1.log > test2.log


tr명령어는 텍스트 파일의 문자 변환 및 삭제를 위한 명령어 이다.

* tr : 문자 변환 명령어 호출
* -d : 이 옵션은 삭제(delete)를 의미한다
* '\r' : 삭제할 문자인 '캐리지 리턴'문자를 지정
* < 원본파일 : 여기서 원본파일의 내용을 리디렉션으로 입력받는다.
* > 변환된 파일 : 리디렉션으로 변환된 파일을 저장한다.

728x90
반응형