제어 문자 처리

제어 문자 처리

hex \u0003과 같은 보이지 않는 제어 문자가 많이 포함된 로그 파일이 있습니다.

SED와 같은 것으로 바꾸고 싶지만 일치하는 정규식의 첫 번째 부분을 가져올 수 없습니다.

/s/^E/some_string

"man ascii" 페이지에서 읽은 대로 CTRL-V CTRL-0 CTRL-3을 눌러 특수 문자 ^E를 만들었습니다.

003 3 03 ETX

그러나 해당 제어 문자와 일치하는 항목은 없습니다.

도움을 주시면 감사하겠습니다!

답변1

이 명령을 사용할 수도 있습니다 tr. 예를 들어:

제어 문자 제거:

tr -d '\033' < file

제어 문자를 다른 제어 문자로 바꾸려면 다음을 수행하십시오.

tr '\033' 'x' < file

제어 문자의 값이 무엇인지 확실하지 않은 경우 8진수 덤프를 수행하면 해당 값이 인쇄됩니다.

$ cat file
hello
^[
world

$ od -b file    
0000000 150 145 154 154 157 012 033 012 167 157 162 154 144 012
0000016

따라서 제어 문자의 ^[값 은 입니다 \033.

답변2

이 perl one-liner는 작업을 수행합니다. 파일을 수정한다는 점에 유의하세요.

perl -i -pe 's#\x{0003}#some_string#g' /path/to/log/file

여러 문자를 지정된 범위의 문자 코드로 바꾸려면 다음을 수행하십시오.

echo {A..Z} | perl -i -pe 's#[\x{0040}-\x{0047}]#P#g'
P P P P P P P H I J K L M N O P Q R S T U V W X Y Z 

(에코 {A..Z}Bash에서 알파벳 문자 문자열 생성)

답변3

인쇄할 수 없는 모든 문자는 다음으로 대체됩니다.#

sed 's/[^[:print:]]/#/g' logfile

답변4

원하는 것이 무엇인지 잘 모르겠지만 연속된 16진수 바이트 0x00 0x03 을 바꾸는 경우 다음과 같이 작동합니다.

$ echo '0 61 20 00 03 0A' | xxd -r | sed 's/\x00\x03/test/g' 
a test

관련 정보