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 스타일 "이스케이프" 형식으로 표시되는 문자).