파일에 개행 문자가 있나요?

파일에 개행 문자가 있나요?

내 dos 파일은 기본적으로 CRLF를 줄 바꿈으로 사용합니다. 그러나 때때로 CRLF 대신 LF를 얻습니다. 개행 문자가 정확히 어디에 나타나는지 알아내야 합니다. 그리고 LF를 CRLF로 바꾸고 싶지 않습니다. 줄 바꿈으로 기록된 변경 사항을 보려면

답변1

다음과 같은 간단한 예를 들어보세요.

$ cat -et file
122323432.....^M$
4354363645....^M$
45234564655...$
34r52435346...^M$
122323432.....^M$

( cat -et줄 끝을 표시하는 데 사용됨)

$ awk '{last = $0} NR==1 {cr = /^M$/ ? 0 : 1; next} cr == 0 && /^M$/ {print last; cr = 1} cr == 1 && !/^M$/ {print last; cr = 0}' file | cat -et
4354363645....^M$
45234564655...$
34r52435346...^M$

예를 들어 ^M실제 CR 문자 입력으로 +를 사용합니다.CtrlV Enter


다음은 다소 문자 그대로 번역하려는 시도입니다 python.

#!/usr/bin/python3

import re

p = re.compile(r'.*\r$')

with open('file', 'r', newline='') as f:
    for idx, line in enumerate(f):
        last = line
        m = p.match(line)
        if (idx==0):
            cr = 0 if m else 1
        if (cr==0) and m:
            print(last, end='')
            cr = 1
        elif (cr==1) and not m:
            print(last, end='')
            cr = 0

답변2

시스템에 cat-e스위치가 있으면 이를 사용하여 캐리지 리턴을 볼 수 있습니다. 여기서 첫 번째 행에는 CR( 로 표시됨 ^M)이 있고 두 번째 행에는 없습니다.

$ cat -e crlf
foo^M$
bar$

M(어떤 광대가 파일에 문자 그대로 캐럿 + 조합을 썼다 면 CR과 동일하게 보일 것입니다.)

또는 사용 less -U( 제공되지 않은 경우)과 유사 하지만 반대 색상으로 -r캐리지 리턴을 표시합니다 .^M

답변3

GNU grep을 사용하십시오:

grep --binary -v $'\r'$ dosfile

입력 예(3번째 줄에는 캐럿과 M을 들고 있는 광대가 있습니다):

$ cat -e dosfile
line1^M$
line2^M$
line3 joker ^M^M$
line4^M$
line5^M$
line6$
line7$

$ od -c dosfile
0000000   l   i   n   e   1  \r  \n   l   i   n   e   2  \r  \n   l   i
0000020   n   e   3       j   o   k   e   r       ^   M  \r  \n   l   i
0000040   n   e   4  \r  \n   l   i   n   e   5  \r  \n   l   i   n   e
0000060   6  \n   l   i   n   e   7  \n
0000070

$ grep --binary -v $'\r'$ dosfile
line6
line7

관련 정보