텍스트 파일에서 줄 끝을 찾는 방법은 무엇입니까?
bash에서 무언가를 사용하여 해석되지 않고 인쇄 된 파일의 줄 끝을 표시하려고합니다. 이 파일은 처리를 위해 Linux 시스템에서 SSIS / SQL Server를 읽어 오는 덤프입니다.
내 모든 스위치가 있습니까
vi
,less
,more
, 등?줄 끝을 보는 것 외에도 줄 끝의 유형이 (
CRLF
또는LF
) 인지 알아야합니다 . 어떻게 알 수 있습니까?
이 file
유틸리티를 사용하여 줄 끝 유형을 표시 할 수 있습니다 .
유닉스 :
$ file testfile1.txt
testfile.txt: ASCII text
"DOS":
$ file testfile2.txt
testfile2.txt: ASCII text, with CRLF line terminators
"DOS"를 Unix로 변환하려면 :
$ dos2unix testfile2.txt
유닉스에서 "DOS"로 변환하기 :
$ unix2dos testfile1.txt
이미 변환 된 파일을 변환해도 아무런 효과가 없으므로 일반적인 고지 사항이 항상 적용되지만 맹목적으로 실행하는 것이 안전합니다 (즉, 먼저 형식을 테스트하지 않고).
에서 vi
...
:set list
줄 끝을 볼 수 있습니다.
:set nolist
정상으로 돌아갑니다.
나는 당신이 \n
또는 \r\n
in을 볼 수 없다고 생각하지만 vi
, 어떤 줄 끝을 가지고 있는지 유추하기 위해 어떤 유형의 파일 (UNIX, DOS 등)을 볼 수 있습니다 ...
:set ff
또는에서 bash
당신이 사용 od -t c <filename>
하거나 od -c <filename>
수익을 표시합니다.
bash 쉘에서을 시도하십시오 cat -v <filename>
. Windows 파일에 대한 캐리지 리턴이 표시되어야합니다.
(Windows XP의 Cygwin을 통해 rxvt에서 나에게 도움이되었습니다).
편집자 주 : (CR) 문자를 cat -v
시각화 \r
합니다. 로 ^M
. 따라서 줄 끝 \r\n
시퀀스는 ^M
각 출력 줄의 끝에서와 같이 표시됩니다 . cat -e
부가 적으로 시각화 할 \n
즉 같이 $
. ( cat -et
탭 문자를 추가로 시각화합니다 ^I
.)
우분투 14.04 :
간단하게 cat -e <filename>
작동합니다.
그러면 Unix 줄 끝 ( \n
또는 LF) 이 표시 $
되고 Windows 줄 끝 ( \r\n
또는 CRLF)이 표시됩니다 ^M$
.
^M
적은 양을 사용하는 것처럼 CR을 표시 less -u
하거나 -u적은 양을 열면 열 수 있습니다.
man less
말한다 :
-u or --underline-special Causes backspaces and carriage returns to be treated as print- able characters; that is, they are sent to the terminal when they appear in the input.
xxd
파일의 16 진 덤프를 표시하고 "0d0a"또는 "0a"문자를 찾는 데 사용할 수 있습니다 .
cat -v <filename>
@warriorpostman이 제안한대로 사용할 수 있습니다 .
"file -k"를 시도하십시오
짧은 버전 : file -k somefile.txt
당신에게 말할 것입니다.
with CRLF line endings
DOS / Windows 줄 끝 을 출력 합니다.with LF line endings
MAC 줄 끝을 출력 합니다.- 그리고 Linux / Unix 라인 "CR"의 경우 출력
text
됩니다. (따라서 명시 적으로 언급하지 않으면 "CR 줄 끝"을line endings
암시 적으로 의미 합니다.
긴 버전 은 아래를 참조하십시오.
실제 응용 프로그램 : 인증서 인코딩
때로는 PEM 인증서 파일을 확인해야합니다.
규칙적인 문제 file
는 이것입니다. 때로는 너무 똑똑하거나 너무 구체적이려고합니다.
약간의 퀴즈를 시도해 봅시다 : 파일이 있습니다. 그리고이 파일들 중 하나는 줄 끝이 다릅니다. 어느 것?
(이것은 내 일반적인 "인증서 작업"디렉토리 중 하나입니다.)
정기적으로 시도해 봅시다 file
.
$ file -- *
0.example.end.cer: PEM certificate
0.example.end.key: PEM RSA private key
1.example.int.cer: PEM certificate
2.example.root.cer: PEM certificate
example.opensslconfig.ini: ASCII text
example.req: PEM certificate request
허. 줄 끝을 알려주지 않습니다. 그리고 나는 그것이 인증서 파일이라는 것을 이미 알고있었습니다 . 그 말을하기 위해 "파일"이 필요하지 않았습니다.
다른 무엇을 시도 할 수 있습니까?
다음 dos2unix
과 같이 --info
스위치를 사용해보십시오 .
$ dos2unix --info -- *
37 0 0 no_bom text 0.example.end.cer
0 27 0 no_bom text 0.example.end.key
0 28 0 no_bom text 1.example.int.cer
0 25 0 no_bom text 2.example.root.cer
0 35 0 no_bom text example.opensslconfig.ini
0 19 0 no_bom text example.req
yup, "0.example.end.cer"는 이상한 사람이어야합니다. 그러나 어떤 종류의 줄 끝이 있습니까? 마 당신은 마음에 의해 DOS2UNIX 출력 형식을 알아? (아니요)
그러나 다행히도 --keep-going
(또는 -k
짧은) 옵션이 있습니다 file
.
$ file --keep-going -- *
0.example.end.cer: PEM certificate\012- , ASCII text, with CRLF line terminators\012- data
0.example.end.key: PEM RSA private key\012- , ASCII text\012- data
1.example.int.cer: PEM certificate\012- , ASCII text\012- data
2.example.root.cer: PEM certificate\012- , ASCII text\012- data
example.opensslconfig.ini: ASCII text\012- data
example.req: PEM certificate request\012- , ASCII text\012- data
우수한! 이제 홀수 파일에 DOS ( CRLF
) 줄 끝 이 있음을 알았습니다 . (그리고 다른 파일은 Unix ( LF
) 줄 끝이 있습니다. 이것은이 출력에서 명시 적이 지 않습니다. 암시 적입니다. file
"일반적인"텍스트 파일을 기대하는 방식 일뿐 입니다.)
(내 니모닉을 공유하려면 "L"은 "Linux"및 "LF"입니다.)
이제 범인을 변환하고 다시 시도해 보겠습니다.
$ dos2unix -- 0.example.end.cer
$ file --keep-going -- *
0.example.end.cer: PEM certificate\012- , ASCII text\012- data
0.example.end.key: PEM RSA private key\012- , ASCII text\012- data
1.example.int.cer: PEM certificate\012- , ASCII text\012- data
2.example.root.cer: PEM certificate\012- , ASCII text\012- data
example.opensslconfig.ini: ASCII text\012- data
example.req: PEM certificate request\012- , ASCII text\012- data
좋은. 이제 모든 인증서에는 유닉스 라인 엔딩이 있습니다.
추가 자료
man file
man dos2unix
- 위키 백과 : 줄 바꿈
이 명령 todos filename
을 사용하여 DOS 끝 fromdos filename
으로 변환하고 UNIX 줄 끝으로 변환 할 수 있습니다. Ubuntu에 패키지를 설치하려면을 입력하십시오 sudo apt-get install tofrodos
.
vim -b filename
이진 모드에서 파일을 편집하는 데 사용할 수 있습니다. 캐리지 리턴에는 ^ M 문자가 표시되고 새 줄은 LF가 있음을 나타내며 Windows CRLF 줄 끝을 나타냅니다. LF는 의미 \n
하고 CR은 의미 \r
합니다. -b 옵션을 사용하면 파일은 [unix]
상태 표시 줄에 표시된대로 기본적으로 항상 UNIX 모드에서 편집됩니다 . 즉, 새 행을 추가하면 CRLF가 아니라 LF로 끝납니다. CRLF 줄 끝이있는 파일에서 -b없이 일반 vim을 사용하는 경우 [dos]
상태 줄에 표시되고 삽입 된 줄에는 줄 끝이 CRLF가됩니다. fileformats
설정에 대한 vim 설명서 는 복잡성을 설명합니다.
또한 Notepad ++ 답변에 대해 언급 할 점이 충분하지 않지만 Windows에서 Notepad ++를 사용하는 경우 View / Show Symbol / Show End of Line 메뉴를 사용하여 CR 및 LF를 표시하십시오. 이 경우 LF가 표시되는 반면 vim의 경우 LF가 새 행으로 표시됩니다.
출력을 텍스트 파일로 덤프합니다. 그런 다음 메모장 ++에서 열고 모든 문자 표시 버튼을 클릭하십시오. 매우 우아하지는 않지만 작동합니다.
참고 URL : https://stackoverflow.com/questions/3569997/how-to-find-out-line-endings-in-a-text-file
'Programing' 카테고리의 다른 글
jQuery 또는 순수 JavaScript에 파일이 있는지 어떻게 확인합니까? (0) | 2020.04.02 |
---|---|
연관 배열 키 목록 가져 오기 (0) | 2020.04.02 |
Docker의 이미지를 어떻게 삭제합니까? (0) | 2020.04.02 |
쉘 스크립트에 전달 된 마지막 인수 얻기 (0) | 2020.04.02 |
프로그래밍 방식으로 TextView에서 왼쪽 드로어 블을 설정 (0) | 2020.04.02 |