내 터미널에서 캐리지 리턴(`\0D`)을 해석하지 마세요.

내 터미널에서 캐리지 리턴(`\0D`)을 해석하지 마세요.

grep대용량 텍스트 파일에서 특정 표현을 사용해야 하는 경우가 많습니다 . 어떤 이유로 개인 공급자는 텍스트 파일의 특정 줄에서 매개 변수를 구분하기 위해 CR(캐리지 리턴, )을 사용하기로 결정했습니다.\0D

그러나 이 CR문자는 터미널에서 해석되므로 my grep또는 cat명령이 거의 쓸모 없게 됩니다.

그렇다면 터미널에 다음 파일(예를 들어)의 내용을 어떻게 표시할 수 있습니까 xterm-256color?

$ hexdump /tmp/bla 
0000000 3031 3030 3020 0d20 3335 310d 3132 3830
0000010 300d 302e 3031 3030 0d30 0a33          
000001c

지금까지 시도했지만 운이 없었습니다.

$ TERM=dumb cat /tmp/bla 
3.010000

답변1

GNU cat에는 이러한 특수 문자가 포함된 파일을 인쇄하는 데 도움이 되는 몇 가지 옵션이 있습니다:

   -v, --show-nonprinting
          use ^ and M- notation, except for LFD and TAB

그러므로 cat -v /tmp/bla이것은 귀하의 상황에 따라 이루어져야 합니다. 아니면 -et특별한 방법으로 탭과 줄 끝을 인쇄할 수도 있습니다.

답변2

더 유용한 것은 데이터가 16진수이고 0xd가 캐리지 리턴( \r또는 ^M)임을 식별하는 것입니다. 이 문제를 해결하는 방법에는 여러 가지가 있습니다.

  • 질문에 따르면특정 라인, 그리고 덤프를 보면 script누군가가 파일 편집을 변경한 것일 수 있습니다. 이 경우 편집 변경 사항의 최종 결과를 한 줄에 모두 얻고 싶을 수 있습니다. 당신이 사용할 수있는col이를 위해 예를 들어

    col /tmp/bla

    col상상만큼 강력하지는 않지만 . (저는 vi-like-emacs 매뉴얼 페이지 필터를 기반으로 한 스크립트를 사용하여좋아요결과 - 내 답장에 간단한 스크립트를 만들었습니다.Unix 유틸리티를 사용하여 프로그래밍 방식으로 ANSI 제어 코드를 파일에 "구울" 수 있습니까?)보다 더 유용 할 수도 있습니다 col.

  • 그런 다음 OP는 이것을 여러 줄로 처리하기를 원합니다. 이렇게 하려면 다음을 수행할 수 있습니다(캐리지 리턴을 줄 바꿈으로 변환).

    tr '\r' '\n' </tmp/bla

그런데 캐리지 리턴은 이스케이프 시퀀스가 ​​아닙니다.어느선택적으로 C 스타일 "이스케이프" 형식으로 표시되는 문자).

관련 정보