sed가 ASCII가 아닌 바이트를 대체하지 않는 이유는 무엇입니까?

sed가 ASCII가 아닌 바이트를 대체하지 않는 이유는 무엇입니까?

OS X(Homebrew를 통해 설치된 4.2.2)에서 GNU sed로 교체하려고 합니다. 그러나 이것은 작동하지 않습니다.

printf "Hello\x92 World" | gsed -r "s/[\x92]/'/g"

예상되는 출력은 다음과 같습니다.

Hello' World

실제 출력은 다음과 같습니다.

Hello<unknown character symbol> World

나는 또한 다음을 시도했습니다.

printf "\x92" | gsed -r 's/[\x92]/P/g'

그러나 인쇄할 수 없는 문자인 "\x92" 바이트가 계속 나타납니다.

내가 여기서 뭘 잘못하고 있는 걸까?

답변1

방금 sed정보 페이지( info sed)를 꼼꼼히 확인하고 다양한 방법으로 꽤 많은 실험을 해봤습니다.

\x92내 결론: 표현된 문자를 문자 클래스에 넣을 수 없습니다 .

그러나 |.

다음은 몇 가지 데모입니다.

$ printf "a\x92\n"
a?
$ printf "a\x92\n" | sed 's/[a\x92]/P/g'
P?
$ printf "a\x92\n" | sed 's/[a\\x92]/P/g'
P?
$ printf "a\x92\n" | sed 's/[a'$'\x92'']/P/g'
P?
$ printf "a\x92\n" | sed 's/[a'"$(printf '\x92')"']/P/g'
P?
$ printf "a\x92\n" | sed 's/[a[\x92]]/P/g'
a?
$ printf "a\x92\n" | sed 's/a\|\x92/P/g'
PP
$ printf "a\x92\n" | sed -r 's/a|\x92/P/g'
PP
$ 

관련 정보