모든 줄 바꿈 전에 캐리지 리턴을 추가하는 방법은 무엇입니까?


28

\n줄 바꿈 에만 사용하는 파일이 있지만 \r\n줄 바꿈마다 필요합니다 . 어떻게해야합니까?

예를 들어 Vim에서을 사용하여 해결 :%s/\n/\r\n/g했지만 스크립트 또는 명령 줄 응용 프로그램을 사용하고 싶습니다. 어떤 제안?

나는 이것을 sed또는로 찾아 보았지만 grep즉시 이스케이프 시퀀스 해결 방법으로 혼란 스러웠습니다 (이 명령으로 약간 녹색입니다).

관심이 있으시면 신청서가 내 질문 / 답변과 관련되어 있습니다.

답변:


36

unix2dos 를 사용할 수 있습니다 (Debian에 있음).

unix2dos file

이 구현은 삽입하지 않습니다 CR모든 전에 LF만 전에 LF이미 단 하나의 앞에되지 않습니다의 CR이진 파일을 건너 뜁니다합니다 (0x0으로의 바이트 값을 포함하는 사람들은 -> 0x1f이 이외의 범위 LF, FF, TAB또는 CR).

또는 사용 sed:

CR=$(printf '\r')
sed "s/\$/$CR/" file

또는 사용 awk:

awk '{printf "%s\r\n", $0}' file

또는 사용 perl:

perl -pe 's|\n|\r\n|' file

참고 unix2dox가 를 삽입하지 않습니다 CR하기 전에 모든 에만 이미 단 하나의 CR이 선행되지 않는 그 LFS 전에, LF.
Stéphane Chazelas

@ StéphaneChazelas : 요점에 감사드립니다. 내 대답에 추가했습니다.
cuonglm

1
여기에 사용 된 나를 위해 정보의 주요 작품 '\r'으로는 sed트릭을 수행합니다.
rkersh 2016 년

8

이것은 정확히 무엇입니까 unix2dos:

$ unix2dos file.txt

file.txtCRLF 줄 끝이있는 버전으로 대체 됩니다.

당신이 함께하고 싶어 sed, 당신은 모든 라인의 끝에 캐리지 리턴을 삽입 할 수 있습니다 :

sed -e 's/$/\r/' file.txt

이 대체합니다 ( s) 라인 (의 끝나기 전에 크기가 0 인 영역 오른쪽 $으로) \r. 전체 교체 (예 : unix2dos수행) 를 수행하려면 sed -i.bak표준 확장명이 아니지만을 사용하십시오. 확장이 없으면 임시 파일을 사용하십시오.


3
를 사용하여 \r교체의 휴대용하지 않습니다. 적어도 Mac OSX에서는 작동하지 않습니다.
cuonglm

unix2dos에는 여러 가지 구현이 있습니다. (같은 당신은 특정 구현의 홈 페이지로 연결되는 링크를 제공 할 수 있습니다 waterlan.home.xs4all.nl/dos2unix.html을 데비안에서 발견) 대신 linux.die.net/man 은 취소하지 않는 한 구현 (또는 버전)이 문서화되어 있습니다. 참고 일부 있다는 것을 u2d, ux2dos, todos뿐만 아니라 주위 명령.
Stéphane Chazelas

2

UNIX 시스템 (OS X, 리눅스)에서 변환을 수행하는 경우와 파일 열기 vi또는 vim:

$ vim my-file

삽입 모드가 아닌지 확인하려면 ESC 키를 누른 다음

:set ff=dos

또는

:set fileformat=dos

파일 형식을 설정하여 변환합니다.

파일을 작성하고 편집기를 종료하려면

:wq

커맨드 라인에서 할 수있는 일

$ vi +':w ++ff=dos' +':q' my-file

모든 단계를 설명해 주셔서 감사합니다-초보자에게는 무슨 일이 일어나고 있는지 쉽게 이해할 수 있습니다.
user3616725

2

POSIX로 이것을하는 것은 까다 롭습니다 :

  • POSIX Sed\r또는을 지원하지 않습니다 \15. 그랬더라도 in place 옵션 -i은 POSIX가 아닙니다.

  • POSIX Awk\r및을 지원 \15하지만 -i inplace옵션은 POSIX가 아닙니다.

  • d2udos2unixPOSIX 유틸리티 가 아니지만 ex

  • POSIX 전은 지원하지 않습니다 \r, \15, \n또는\12

캐리지 리턴을 제거하려면 다음을 수행하십시오.

awk 'BEGIN{RS="\1";ORS="";getline;gsub("\r","");print>ARGV[1]}' file

캐리지 리턴을 추가하려면 다음을 수행하십시오.

awk 'BEGIN{RS="\1";ORS="";getline;gsub("\n","\r&");print>ARGV[1]}' file

1

이를 수행하는 휴대용 쉘 기능 :

u2dos() (set -f; IFS='
'; printf '%s\r\n' $(cat "$1"))

그것으로 당신은 할 수 있습니다 :

u2dos file >dosfile

1

awk에서 당신은 시도 할 수 있습니다

awk '{print $0 "\r"}'

또는

awk -v r=$'\r' '{print $0 r}'

(가) $'\r'와 같은 몇 가지 쉘에서 지원하는 인용 ANSI-C 스타일의 예입니다 ksh93, bash, zsh, mkshFreeBSD의 및 sh 가능성은 단일 유닉스 규격의 문제 8에 포함되어야합니다 .

이상한 문자를 표현하는 일반적인 방법을 제공합니다. 예를 들면 다음과 같습니다.

awk -v r=$'\U0001F608' '{print $0 r}'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.