[unix] 유닉스에서 캐리지 리턴 제거
\r
Unix의 파일에서 모든 캐리지 리턴을 제거하는 가장 간단한 방법은 무엇입니까 ?
답변
내가 당신에게 평균 캐리지 리턴 (가정거야 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을 입력해야합니다.