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