\n
줄 바꿈 에만 사용하는 파일이 있지만 \r\n
줄 바꿈마다 필요합니다 . 어떻게해야합니까?
예를 들어 Vim에서을 사용하여 해결 :%s/\n/\r\n/g
했지만 스크립트 또는 명령 줄 응용 프로그램을 사용하고 싶습니다. 어떤 제안?
나는 이것을 sed
또는로 찾아 보았지만 grep
즉시 이스케이프 시퀀스 해결 방법으로 혼란 스러웠습니다 (이 명령으로 약간 녹색입니다).
관심이 있으시면 신청서가 내 질문 / 답변과 관련되어 있습니다.
답변
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
답변
이것은 정확히 무엇입니까 unix2dos
:
$ unix2dos file.txt
file.txt
CRLF 줄 끝이있는 버전으로 대체 됩니다.
당신이 함께하고 싶어 sed
, 당신은 모든 라인의 끝에 캐리지 리턴을 삽입 할 수 있습니다 :
sed -e 's/$/\r/' file.txt
이 대체합니다 ( s
) 라인 (의 끝나기 전에 크기가 0 인 영역 오른쪽 $
으로) \r
. 전체 교체 (예 : unix2dos
수행) 를 수행하려면 sed -i.bak
표준 확장명이 아니지만을 사용하십시오. 확장이 없으면 임시 파일을 사용하십시오.
답변
UNIX 시스템 (OS X, 리눅스)에서 변환을 수행하는 경우와 파일 열기 vi
또는 vim
:
$ vim my-file
삽입 모드가 아닌지 확인하려면 ESC 키를 누른 다음
:set ff=dos
또는
:set fileformat=dos
파일 형식을 설정하여 변환합니다.
파일을 작성하고 편집기를 종료하려면
:wq
커맨드 라인에서 할 수있는 일
$ vi +':w ++ff=dos' +':q' my-file
답변
POSIX로 이것을하는 것은 까다 롭습니다 :
-
POSIX Sed 는
\r
또는을 지원하지 않습니다\15
. 그랬더라도 in place 옵션-i
은 POSIX가 아닙니다. -
POSIX Awk 는
\r
및을 지원\15
하지만-i inplace
옵션은 POSIX가 아닙니다. -
d2u 및 dos2unix 는 POSIX 유틸리티 가 아니지만 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
답변
이를 수행하는 휴대용 쉘 기능 :
u2dos() (set -f; IFS='
'; printf '%s\r\n' $(cat "$1"))
그것으로 당신은 할 수 있습니다 :
u2dos file >dosfile
답변
awk에서 당신은 시도 할 수 있습니다
awk '{print $0 "\r"}'
또는
awk -v r=$'\r' '{print $0 r}'
(가) $'\r'
와 같은 몇 가지 쉘에서 지원하는 인용 ANSI-C 스타일의 예입니다 ksh93
, bash
, zsh
, mksh
FreeBSD의 및 sh
가능성은 단일 유닉스 규격의 문제 8에 포함되어야합니다 .
이상한 문자를 표현하는 일반적인 방법을 제공합니다. 예를 들면 다음과 같습니다.
awk -v r=$'\U0001F608' '{print $0 r}'