programing

텍스트 파일의 행 끝을 확인하려면 어떻게 해야 합니까?

golfzon 2023. 4. 9. 22:34
반응형

텍스트 파일의 행 끝을 확인하려면 어떻게 해야 합니까?

해석되지 않고 인쇄된 파일의 행 끝을 표시하기 위해 bash에서 뭔가를 사용하려고 합니다.파일은 처리를 위해 Linux 머신에 의해 읽혀지는 SSIS/SQL Server로부터의 덤프입니다.

  • " " " " 내에 스위치가 ?vi,less,more

  • 엔딩이 것 엔드의 ( 「 」 「 」 「 」 「 」 「 」 「 」 「 」 「 」 「 」 。CRLF ★★★★★★★★★★★★★★★★★」LF 하면 알 수 떻게하 하면 면? ???

.file유틸리티를 사용하여 행 끝의 유형을 표시할 수 있습니다.

Unix:

$ file testfile1.txt
testfile.txt: ASCII text

"DOS":

$ file testfile2.txt
testfile2.txt: ASCII text, with CRLF line terminators

"DOS"에서 Unix로 변환하려면:

$ dos2unix testfile2.txt

Unix에서 "DOS"로 변환하려면:

$ unix2dos testfile1.txt

이미 변환된 파일을 변환해도 아무런 효과가 없기 때문에 포맷을 먼저 테스트하지 않고 맹목적으로 실행해도 안전합니다.다만, 통상의 면책 사항이 적용됩니다.

Ubuntu 14.04:

cat -e <filename>정상적으로 동작합니다.

엔딩UNIX 회선 엔딩)이됩니다.\n LF로 지정합니다.$엔딩(「Windows」)\r\n CRLF를 'CRLF'로 합니다.^M$.

»vi

:set list행의 엔딩을 확인합니다.

:set nolist다시 정상으로 돌아가기 위해서요

보일 것 \n ★★★★★★★★★★★★★★★★★」\r\nvi어떤 종류의 파일(UNIX, DOS 등)인지 알 수 있기 때문에 어떤 행의 엔딩이 있는지 알 수 있습니다.

:set ff

에서bash 하면 .od -t c <filename> 그냥 '그냥'일 수도 있어요.od -c <filename>를 참조해 주세요.

에서 bash를 합니다.cat -v <filename>Windows の windows windows windows windows windows windows windows windows windows windows windows windows windows windows windows windows windows windows windows windows 。

(이것은 Windows XP의 Cygwin 경유로 rxvt로 동작했습니다).

: ★★★★★★★★★★★★★★★★★★★★★★」cat -v「」를 시각화하다\rCR) :^M의 끝은 「」, 「」입니다\r\n는 '하다'로 됩니다.^M각 출력 라인의 끝에 있습니다. cat -e추가 시각화가 이루어집니다.\n, 「」, 「」라고 합니다$ ( . )cat -et탭 문자를 다음과 같이 추가로 시각화합니다.^I

★★를 해 보세요.file , , , 「 」file -k , , , 「 」dos2unix -ih

file이치노하지만 어려운 경우에는 시도해 보세요.file -k ★★★★★★★★★★★★★★★★★」dosunix -ih.

상세내용은 다음과 같습니다.


★★를 해 보세요.file -k

트트: : file -k somefile.txt말해줄게.

  • 됩니다.with CRLF line endingsDOS/Windows の dos dos dos dos dos dos dos dos dos dos dos dos 。
  • 됩니다.with CR line endingsMAC mac mac mac mac mac 。
  • 출력만 됩니다.textLinux/Unix "LF" 행의 엔딩에 사용합니다.(따라서 명시적으로 어떤 종류의 언급도 없는 경우)line endings즉, 「LF 회선의 끝」을 의미합니다).

버전은 아래를 참조하십시오.


실제의 예:증명서 부호화

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

즉, "0.example.end.cer"는 이상한 사람일 것입니다.하지만 어떤 종류의 엔딩이 있을까요?dos2unix 출력 포맷을 암기하고 있습니까? (모릅니다.)

다행인 건 but행행 but but but but 행 but but but 。--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(DOS, DOS)을 알게 .CRLF에는 UnixUnix)가 ).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  

좋습니다. 이제 모든 인증서는 Unix 회선 엔딩으로 되어 있습니다.

★★를 해 보세요.dos2unix -ih

위의 예시를 쓸 때는 몰랐지만,

는 dos2unix를 합니다.-ih)--info=h와 경우는 다음과 같습니다.

$ dos2unix -ih -- *
 DOS    UNIX     MAC  BOM       TXTBIN  FILE
   0      37       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

그리고 또 다른 "실제" 순간:헤더 포맷은 기억하기 쉽습니다.다음은 두 가지 니모닉입니다.

  1. DOUM입니다(왼쪽에서 오른쪽으로: DOS의 경우 d, Unix의 경우 u, Mac의 경우 m, BOM의 경우 b).
  2. 또한 "DUM"은 D, U, M의 알파벳 순서일 뿐입니다.

추가 정보

을 CR로 ^M 쓰여서less -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>@param postman @param postman @param postman @param 。

할 수 .todos filename및 DOS 엔딩으로 합니다.fromdos filenameUNIX 회선 엔딩으로 변환합니다.하려면 Ubuntu를 합니다.sudo apt-get install tofrodos

하시면 됩니다.vim -b filename파일을 바이너리 모드로 편집하려면 , 캐리지 리턴용의 ^M 문자를 표시하고, Windows CRLF 행의 종료를 나타내는 새로운 행이 표시됩니다.란 LF를 합니다.\n'은 'CR'을 합니다.\r. b " " " " " " " " " " UNIX " " " " " " 에 .[unix]행에서는 LF로 .CRLF는 LF로 끝납니다.이 있는 일반 CRLF " " " " -b " " " " " " " vim " , " " , " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "[dos]CRLF를 사용하다fileformats설정에 따라 복잡성이 설명됩니다.

또한 메모장++ 답변에 대한 코멘트가 부족하지만 Windows에서 메모장++를 사용하는 경우 보기 / 기호 표시 / 줄 끝 표시 메뉴를 사용하여 CR 및 LF를 표시합니다.이 경우 LF가 표시되고 vim의 경우 LF가 새 행으로 표시됩니다.

출력물을 텍스트 파일로 덤프합니다.그런 다음 메모장 ++에서 열고 Show all characters 버튼을 클릭합니다.우아하지는 않지만 효과가 있다.

- 의 새로운 Vim - Windows로 합니다.^M

의 을 항상 는, 「vim」으로 렌더링 합니다.^M을 에 할 수 .vimrc:

set ffs=unix

그러면 vim은 사용자가 Unix 파일로 여는 모든 파일을 해석합니다.에는 unix "가 있기 \n 문자를 \r\n에) .\n)이가) 있습니다^M이 (vim)을)\r□□□□□□□□★


VIM - Windows 줄바꿈을 표시할 수 있습니다.

「」를 사용할 수 .:e ++ff=unix특정 파일을 편집할 때 사용합니다.


- show type (VIM - 상 vtypetypetype v v v v ( VIM - )unix »dos)

의 맨 에 항상 경우(을 unix로 vim에 할 수 .statusline 함께
set statusline+=\ %{&fileencoding?&fileencoding:&encoding}.

나의 전체 상태 표시줄은 다음과 같습니다. 여기에 돼요..vimrc

" Make statusline stay, otherwise alerts will hide it
set laststatus=2
set statusline=
set statusline+=%#PmenuSel#
set statusline+=%#LineNr#
" This says 'show filename and parent dir'
set statusline+=%{expand('%:p:h:t')}/%t
" This says 'show filename as would be read from the cwd'
" set statusline+=\ %f
set statusline+=%m\
set statusline+=%=
set statusline+=%#CursorColumn#
set statusline+=\ %y
set statusline+=\ %{&fileencoding?&fileencoding:&encoding}
set statusline+=\[%{&fileformat}\]
set statusline+=\ %p%%
set statusline+=\ %l:%c
set statusline+=\ 

마치...

.vim/vimrc\                                    [vim] utf-8[unix] 77% 315:6

파일 맨 아래에


- showfile type (VIM - ((((((((((((((((((((((((((((((( )unix »dos)

있는지 , 을 사용할 수 .:set fileformat(파일 형식을 강제로 설정한 경우에는 작동하지 않습니다).은 반환될 이다.unix 및 unix 의 dosWindows ★★★★★★★★★★★★★★★」

휴대성이 뛰어나고 POSIX도 가능.

위의 예에서 볼 수 있듯이

$ printf "abc\ndef\r\n"
abc
def

sed

$ printf "abc\ndef\r\n" | sed -n l
abc$
def\r$

od

$ printf "abc\ndef\r\n" | od -c  ## optional "-t a"
0000000   a   b   c  \n   d   e   f  \r  \n
0000011

언급URL : https://stackoverflow.com/questions/3569997/how-to-find-out-line-endings-in-a-text-file

반응형