sed 16진수 교체 문제

sed 16진수 교체 문제

dd if=/dev/zero of=file.dd bs=1 count=1테스트 목적 으로 1바이트 NULL 파일을 만들었습니다 . 다음 테스트에서 이상한 결과를 얻었습니다.

dd if=file.dd | 
  sed 's/\x5e/X/' | 
  xxd
00000000: 5800              X.

NULL 데이터 스트림에서 얻는 방법은 무엇입니까 sed?x5E

감사해요.

답변1

정규식 ^특수 문자는 "줄 시작"에 대해 너비가 0인 일치이며 입력 시작 부분에 암시적 줄이 있습니다. 따라서 최소한 한 줄로 구성된 것으로 간주되는 모든 입력 및 sed(또는 대부분의 정규식 도구)은 이를 다음과 같이 처리합니다.

$ printf "\0\0\0" | od -c
0000000   \0  \0  \0
0000003
$ printf "\0\0\0" | sed 's/^/Y/' | od -c
0000000    Y  \0  \0  \0  \n
0000005
$ printf "\0\0\0" | perl -ple 's/^/Y/' | od -c
0000000    Y  \0  \0  \0  \n
0000005

GNU sed추가적인 합병증치료는 \x5e다음과 동일합니다 ^.

$ printf "\0\0\0" | gsed 's/^/Y/' | od -c
0000000    Y  \0  \0  \0
0000004
$ printf "\0\0\0" | gsed 's/\x5e/Y/' | od -c
0000000    Y  \0  \0  \0
0000004

^리터럴을 일치시키려면 취급하지 않거나 특별하게 취급하지 않는 다른 형식을 사용해야 합니다 .^\x5e

$ printf "\0\x5e\0" | gsed 's/[=\x5e]/Y/' | od -c
0000000   \0   Y  \0
0000003
$ printf "\0\x5e\0" | perl -pe 's/\x5e/Y/' | od -c
0000000   \0   Y  \0
0000003

관련 정보