[unix] 유닉스에서 캐리지 리턴 제거

\rUnix의 파일에서 모든 캐리지 리턴을 제거하는 가장 간단한 방법은 무엇입니까 ?



답변

내가 당신에게 평균 캐리지 리턴 (가정거야 CR, "\r", 0x0d상기) 이 아니라 단지 맹목적으로 파일 내에서보다 더 라인을 (당신은 내가 아는 모든 문자열의 중간에이를 수있다). CR첫 줄 끝에 만이 테스트 파일을 사용하는 경우 :

$ cat infile
hello
goodbye

$ cat infile | od -c
0000000   h   e   l   l   o  \r  \n   g   o   o   d   b   y   e  \n
0000017

dos2unix 시스템에 설치되어 있으면 갈 수있는 방법입니다.

$ cat infile | dos2unix -U | od -c
0000000   h   e   l   l   o  \n   g   o   o   d   b   y   e  \n
0000016

어떤 이유로 든 dos2unix사용할 수없는 경우 다음 sed을 수행하십시오.

$ cat infile | sed 's/\r$//' | od -c
0000000   h   e   l   l   o  \n   g   o   o   d   b   y   e  \n
0000016

어떤 이유로 든 sed사용할 수없는 ed경우 복잡한 방법으로 수행 할 수 있습니다.

$ echo ',s/\r\n/\n/
> w !cat
> Q' | ed infile 2>/dev/null | od -c
0000000   h   e   l   l   o  \n   g   o   o   d   b   y   e  \n
0000016

당신이하지 않으면 어떤 당신의 상자에 설치하는 도구를 사용하면 변환 파일을 것보다 더 큰 문제가 있어요 🙂


답변

tr -d '\r' < infile > outfile

tr (1) 참조


답변

오래된 학교:

tr -d '\r' < filewithcarriagereturns > filewithoutcarriagereturns


답변

리눅스에서 가장 간단한 방법은 제 생각에는

sed -i 's/\r$//g' <filename>

대체 연산자에 대한 강한 따옴표's/\r//'필수적 입니다. 그것들이 없으면 쉘은 \r이스케이프 + r로 해석 하고 평범하게 r줄이고 소문자를 모두 제거합니다 r. 그렇기 때문에 2009 년 Rob 이 제공 한 답변이 효과가없는 이유 입니다.

/g수정자를 추가하면 \r첫 번째 항목뿐만 아니라 여러 항목 도 제거됩니다.


답변

많은 시스템에 존재하며 대부분에 쉽게 설치할 수있는 dos2unix 라는 유틸리티 가 있습니다.


답변

sed -i s/\r// <filename>또는 그런 것; 의 man sed사용과 관련하여 웹에서 볼 수있는 풍부한 정보를 참조하십시오 sed.

지적해야 할 것은 위의 “캐리지 리턴”의 정확한 의미입니다. 단일 제어 문자 “캐리지 리턴”을 실제로 의미하는 경우 위 패턴이 올바른 것입니다. 보다 일반적으로 CRLF (캐리지 리턴 및 줄 바꿈, 즉 줄 바꿈이 Windows에서 구현되는 방식)를 의미하는 경우 \r\n대신 바꾸려고 할 수 있습니다. Linux / Unix의 베어 라인 피드 (개행)는 \n입니다.


답변

Vi 사용자 인 경우 다음을 사용하여 파일을 열고 캐리지 리턴을 제거 할 수 있습니다.

:%s/\r//g

또는

:1,$ s/^M//

ctrl-v를 누른 다음 ctrl-m을 눌러 ^ M을 입력해야합니다.