로그 파일에서 ^M 문자 제거

로그 파일에서 ^M 문자 제거

로그 파일에서 ^M 문자를 제거합니다.

내 스크립트에서는 프로그램의 출력을 로그 파일로 리디렉션합니다. 내 로그 파일의 출력에는 일부 ^M(개행) 문자가 포함되어 있습니다. 런타임에 삭제해야 합니다.

내 명령:

$ java -jar test.jar >> test.log 

test.log가지다:

시작 스크립트...^M 시작 스크립트...초기화

답변1

독립 실행형 파일 변환

다음 명령을 실행하면:

$ dos2unix <file>

<file>모든 ^M 문자가 제거 됩니다 . <file>그대로 유지하려면 dos2unix다음과 같이 실행하세요.

$ dos2unix -n <file> <newfile>

명령의 출력을 구문 분석합니다.

파이프라인을 통해 명령 체인의 일부로 실행해야 하는 경우 원하는 수의 도구(예 tr: sed, awk또는 ) 를 사용할 수 있습니다 perl.

$ java -jar test.jar | tr -d '^M' >> test.log

sed

$ java -jar test.jar | sed 's/^M//g' >> test.log

$ java -jar test.jar | awk 'sub(/^M/,"")' >> test.log

진주

$ java -jar test.jar | perl -p -e 's/^M//g' >> test.log

^M을 입력하세요.

입력 시 ^M반드시 다음 방법 중 하나로 입력해 주세요.

  1. Control++ 대신 ++ 로 .​vMShift6M
  2. 백슬래시 r은 ( \r)입니다.
  3. 8진수( \015)로 표시됩니다.
  4. 16진수( \x0D)로 표시됩니다.

이것이 왜 필요한가요?

이는 ^MWindows 플랫폼에서 행 끝 종료가 수행되는 방식의 일부입니다. 각 줄은 캐리지 리턴과 개행 문자로 끝납니다.

Unix 시스템에서 줄 끝은 개행 문자로만 종료됩니다.

  • newline= 0x0Ahex, 로도 작성됩니다 \n.
  • 0x0D16진수 캐리지 리턴 문자 = 라고도 합니다 \r.

.odhexdump​다음은 캐리지 리턴 + 개행 문자로 끝나는 줄이 포함된 샘플 파일입니다.

$ cat sample.txt
hi there
bye there

hexdump+ 를 사용하여 \r볼 수 있습니다 \n.

$ hexdump -c sample.txt 
0000000   h   i       t   h   e   r   e  \r  \n   b   y   e       t   h
0000010   e   r   e  \r  \n                                            
0000015

또는 16진수로 0d+ 0a:

$ hexdump -C sample.txt 
00000000  68 69 20 74 68 65 72 65  0d 0a 62 79 65 20 74 68  |hi there..bye th|
00000010  65 72 65 0d 0a                                    |ere..|
00000015

이것을 실행하십시오 sed 's/\r//g':

$ sed 's/\r//g' sample.txt |hexdump -C
00000000  68 69 20 74 68 65 72 65  0a 62 79 65 20 74 68 65  |hi there.bye the|
00000010  72 65 0a                                          |re.|
00000013

sed해당 역할이 삭제된 것을 확인할 수 있습니다 0d.

변환하지 않고 파일을 보려면 ^M을 사용하시겠습니까?

예, 이 작업을 수행하는 데 사용할 수 있습니다 vim. fileformat위에서 했던 것처럼 파일을 변환하는 효과를 vim에서 설정할 수도 있고 , view 에서 파일 형식을 변경할 수도 있습니다 vim.

파일 형식 변경

:set fileformat=dos
:set fileformat=unix

단축 표기법을 사용할 수도 있습니다.

:set ff=dos
:set ff=unix

또는 보기의 파일 형식만 변경할 수도 있습니다. 이 접근 방식은 비파괴적입니다.

:e ++ff=dos
:e ++ff=unix

^M여기에서 제가 파일을 여는 sample.txt모습 을 볼 수 있습니다 vim.

           vim 도스 #1 ss

이제 뷰에서 파일 형식을 변환합니다.

           vim 도스 SS #2

파일 형식으로 변환한 후의 모습은 다음과 같습니다 unix.

           vim 도스 SS #3

인용하다

답변2

dos2unix줄 끝을 수정하려면 파일을 푸시하세요 .

또는 다음 중 하나를 사용하세요.

sed 's,\r$,,'
tr -d '\r'

답변3

isatty()stdout이 tty가 아닌 경우 호출을 하고 ^M을 출력하지 않도록 프로그램을 수정해야 합니다 .

답변4

특수 기호 없이 ^M을 제거합니다.

$ tr -d '\015' <file1 >file2 

$ mv file2 file1

관련 정보