로그 파일에서 ^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
반드시 다음 방법 중 하나로 입력해 주세요.
- Control++ 대신 ++ 로 .vMShift6M
- 백슬래시 r은 (
\r
)입니다. - 8진수(
\015
)로 표시됩니다. - 16진수(
\x0D
)로 표시됩니다.
이것이 왜 필요한가요?
이는 ^M
Windows 플랫폼에서 행 끝 종료가 수행되는 방식의 일부입니다. 각 줄은 캐리지 리턴과 개행 문자로 끝납니다.
Unix 시스템에서 줄 끝은 개행 문자로만 종료됩니다.
- newline=
0x0A
hex, 로도 작성됩니다\n
. 0x0D
16진수 캐리지 리턴 문자 = 라고도 합니다\r
.
예
.od
hexdump
다음은 캐리지 리턴 + 개행 문자로 끝나는 줄이 포함된 샘플 파일입니다.
$ 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
.
이제 뷰에서 파일 형식을 변환합니다.
파일 형식으로 변환한 후의 모습은 다음과 같습니다 unix
.
인용하다
답변2
dos2unix
줄 끝을 수정하려면 파일을 푸시하세요 .
또는 다음 중 하나를 사용하세요.
sed 's,\r$,,'
tr -d '\r'
답변3
isatty()
stdout이 tty가 아닌 경우 호출을 하고 ^M을 출력하지 않도록 프로그램을 수정해야 합니다 .
답변4
특수 기호 없이 ^M을 제거합니다.
$ tr -d '\015' <file1 >file2
$ mv file2 file1