Linux에서 CRLF를 줄 바꿈으로 변환


34

Linux에서 CRLF 를 파일의 줄 바꿈 으로 변환하는 가장 좋은 방법은 무엇입니까 ?

나는 본 적이 나오지 명령을하지만, 거기에 아무것도 간단하다?


4
속는 : superuser.com/questions/38744/...를 . 허용되는 답변에 제공된 링크는 dos2unix, perl 및 vi 옵션을 포함합니다.
nagul

2
이것은 이미 더 나은 답변을 가지고 있습니다 (따라서 이것들 중 하나가 닫히면 아마 그 것이어야합니다)
Jonik

답변:


40

이 명령을 사용하십시오 :

fromdos yourtextfile

다른 방법으로 :

todos yourtextfile

이러한 명령은 tofrodos 패키지 (가장 최근 배포판)에 있으며 , 동일한 이름의 이전 유닉스 도구를 모방하는 두 개의 래퍼 unix2dosdos2unix 도 제공합니다 .


2
+1 현재 가장 인기있는 "dossunix 사용"답변보다 훨씬 유용합니다.
Jonik

1
그래, 나도 이걸 투표하고있어 내 제안에 더 많은 추진력이 있었다.
Ryan C. Thompson

재귀를 만드는 방법을 말하면 추가 보너스를 줄 것입니다. 현재는 와일드 카드에서만 작동합니다.
sorin

2
@SorinSbarnea : 같은 것find . -name '*.txt' -print0 | xargs -null fromdos
bstpierre

@Jonik 그것이 "훨씬 더 유용한"이유는 무엇입니까? 심각한 질문
andrewtweber

24

사용하십시오 dos2unix.

dos2unix-DOS / MAC에서 UNIX 텍스트 파일 형식 변환기

dos2unix  [options] [-c convmode] [-o file ...] [-n infile outfile ...]

Options:
          [-hkqV] [--help] [--keepdate] [--quiet] [--version]

2
그리고 다른 방법으로 'ix.dos.
quck quixote

ck, 날 따라와? 모든 공감대에 감사하지 않습니다.
Ryan C. Thompson

1
친구, 저는 ~ quack입니다. "~"를 "not"으로 발음하십시오. :)하지만 아니, 당신을 따르지 않아요.
quack quixote

1
Linux 시스템에서이 유틸리티를 얻는 방법에 대해 자세히 설명하십시오. 적어도 우분투에서는 기본적으로 설치되어 있지 않습니다 (그러나 tofrodos 패키지를 설치하면 매우 비슷한 것을 얻을 수 있습니다 : packages.ubuntu.com/jaunty/tofrodos ).
Jonik

20

나는 펄을 선호한다 :

perl -lne 's/\r//g; print' winfile.txt > unixfile.txt

그러나 그것은 나의 용도에 매우 적합하며, 기억하기가 매우 쉽습니다. 모든 시스템에 dos2unix 명령이있는 것은 아니지만 대부분의 작업에는 perl 인터프리터가 있습니다.

또 다른 하나는 recode 입니다. dos2unix와 iconv를 강력하게 대체합니다. 데비안 리포지토리의 "recode"패키지에서 사용할 수 있습니다 :

recode ibmpc..lat1 winfile.txt   # dos2unix
recode lat1..ibmpc unixfile.txt  # unix2dos

대한 AWK의 팬 :

awk '{ sub("\r$", ""); print }' winfile.txt > unixfile.txt

... 그리고 sed :

sed 's/\r$//' winfile.txt > unixfile.txt

그리고 지금 만 삭제보다 약간-덜 뒤얽힌 직선에서 16 진수 편집기에서 CR의 손으로, 우리 stackoverflow.com 친구 중 하나 에 사용 가능한, 쇠고기 (당신의 다정한 이웃 데비안 저장소에있는) 통역,

brainfuck의 dos2unix !

,[[->+>+<<]>>>,[<-------------[+++++++++++++.>>>]<[>>----------[>+++++++++++++.-------------]<++++++++++>]<<<<[-]>>>[-<<<+>>>]]<[-]<[-]<]++++++++++.

이것을 쓰기 위해 한 시간을 낭비한 jk에게 큰 감사를드립니다!


1
(고양이와 고양이의 쓸모없는 사용) 펄은 sed만큼 복잡합니다 ... 따라서 당신은 실제로 질문에 대답하지 않고 오히려 명성을 모으고 있습니다 :)
akira

2
"가장 좋은 방법"은 주관적입니다. 이것은 나에게 가장 효과적입니다 (sed보다 perl에 더 편한 톤입니다). 나는 그것이 당신에게 가장 효과적이라고 약속하지 않았습니다.
quck quixote

@akira : 질문에는 여러 개의 유효한 답변이있을 수 있습니다. 나는 종종이 방법을 주로 다른 변화와 함께 사용하기 때문에 확실히 유효한 답이다. 그러나 "use dos2unix 사용"은 대부분의 상황에서 확실히 더 실용적인 답입니다. 그래서 나는 등급이 괜찮다고 생각합니다.
reinierpost

@ 아키라 : 당신이 그것을 더 간단하게 찾으면 답변으로 게시하고 나머지 사람들을 밝게하십시오.
quck quixote

@ ~ quack : 그게 요점입니다. 더 간단하지 않습니다. 그것은 당신의 펄 답변과 동일합니다. u2d 또는 fromdos / todos는 다른 프로그래밍 언어로 표현 된 것보다 단순 하기 때문에 정답 입니다.
akira

9

나는 Bash에서 이것을한다 :

cat cr_stuffed.file | tr -d \r > no_more_crs.file

좋은. 나는 오늘 일찍 tr에 대한 또 다른 언급을 보았다. 그것은 종종 언급되는 프로그램이 아닙니다.
quack quixote

7

나는 당신도 사용할 수 있다고 생각합니다 tr(시도 할 수있는 재미있는 형식 파일은 없지만).

tr -d '\r' < file1 > file2


4

매우 쉬운 방법을 찾았습니다… nano로 파일 열기 : ## nano file.txt

Ctrl + O를 눌러 저장하되 Enter 키를 누르기 전에 Alt + D를 눌러 DOS와 Unix / Linux 줄 끝을 전환하거나 Alt : M을 눌러 Mac과 Unix / Linux 줄 끝을 전환하고 Enter를 눌러 저장하고 종료하려면 Ctrl + X를 누르십시오.


1
OP에서 요청한 동작을 복제 할 토글 설정을 명확히하기 위해 답을 편집 할 수 있습니까?
Burgi

OP는 DOS 줄 끝을 끄고 싶습니다 Alt+d. 때때로 터미널 프로그램이 alt를 가로 채기 때문에 esc+d대신 사용할 수 있습니다 .
spinup

1
많은 수의 나노 단축키는 Shift를 눌렀을 때 작동하므로 종종 터미널 차단을 방지하므로 'Alt-Shift-D'도 작동합니다.
mwfearnley

3

내가 선호하는 :set fileformat=unix. 가장 빠르지는 않지만 미리 볼 수 있습니다. 엔딩이 혼합 된 파일의 경우 특히 유용합니다.


1

GUI 방식을 원한다면 Kate 텍스트 편집기를 사용해보십시오 (다른 고급 텍스트 편집기에서도이를 처리 할 수 ​​있음). 열기 찾기 / 바꾸기 (대화 Ctrl+ R), 그리고 교체 \r\n와 함께 \n. (NB : 드롭 다운에서 "정규 표현식"을 선택하고 옵션에서 "선택 만"을 선택 해제해야합니다.)

편집 : 또는, 당신은 단순히 유닉스 형식으로 변환 할 경우, 다음 메뉴 옵션을 사용하여 Tools> End of Line> Unix.


이러한 변환을 자동으로 수행 할 수있는 jEdit와 같은 텍스트 편집기가 있습니다. Unix, Windows 또는 Mac 줄 구분 기호를 원하는지 알려면됩니다.
Jonik

실제로 KATE는 도구> 줄 끝 메뉴를 통해서도 그렇게 할 수 있습니다 . 어쩌면 나는 그것이 말로 정확히 같은 질문에 대답보다 더 옆으로 생각한다 - 그러나 당신이 구체적으로 변환 할 알고있는 경우 \r\n\n다음 검색을 사용하여 / OS가 사용하는 라인 결말 기억하는 것보다 쉽습니다 대체합니다. ;)
DisgruntledGoat

1

이것을 dos2unix.py Python 스크립트에 붙여 넣습니다 .

#!/usr/bin/env python
"""\
convert dos linefeeds (crlf) to unix (lf)
usage: dos2unix.py <input> <output>
"""
import sys

if len(sys.argv[1:]) != 2:
  sys.exit(__doc__)

content = ''
outsize = 0
with open(sys.argv[1], 'rb') as infile:
  content = infile.read()
with open(sys.argv[2], 'wb') as output:
  for line in content.splitlines():
    outsize += len(line) + 1
    output.write(line + '\n')

print("Done. Saved %s bytes." % (len(content)-outsize))

Python이 설치된 모든 플랫폼에서 작동합니다. 공개 도메인.


1

CR LFawkLF사용 하는 방법 :

awk -v RS='\r?\n' 1
command | awk -v RS='\r?\n' 1
awk -v RS='\r?\n' 1 filename

사용 예 :

echo -e 'foo\nbar\r\nbaz' | awk -v RS='\r?\n' 1 | hexdump -C

설명:

-v RS='\r?\n'변수 RS ( 입력 r ecord s eparator)를로 설정합니다 \r?\n. 즉, 입력은 LF ( \n)로 구분 된 줄 단위로 읽습니다. 이는 ( ?) 앞에 CR ( \r)이 올 수 있습니다.

1awk가 실행하는 스크립트입니다. 스크립트는로 구성됩니다 condition { action }. 이 경우 1true로 평가되는 조건입니다. 동작이 생략되므로 기본 동작이 실행됩니다. 즉 , 현재 행을 인쇄{print $0} 하거나 간단하게 쓸 수 있습니다 {print}.


LFCR LF: 당신은 가변 설정할 수있다 ORS( O utput R ecord 출력의 라인 단부를 수정 eparator 참조). 예:

echo -e 'foo\nbar\r\nbaz' | awk -v RS='\r?\n' -v ORS='\r\n' 1 | hexdump -C

0

Windows 시스템에서 유닉스 시스템으로 파일을 비상 전송하는 데 필요한 파일에이 스크립트를 사용했습니다.

 find . -type f | xargs file | grep CRLF | cut -d: -f1 | xargs dos2unix

find . -type f

명령을 실행중인 디렉토리에서 모든 파일을 재귀 적으로 찾습니다.

xargs file

에 전달 파일 파일의 분석을 얻기 위해 프로그램.

grep CRLF

CRLF를 보여주는 파일 의 출력 만 원합니다 .

cut -d: -f1

색상까지 출력을 얻습니다. 나머지는 버립니다. 이제 파일 이름 만 있어야합니다

xargs dos2unix

xargs를 사용하여 파일 이름을 dos2unix 프로그램으로 전달하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.