내 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