Por que esta substituição de sed para um byte não-ASCII funciona?

1

Eu tentei esta substituição com o GNU sed no OS X (4.2.2 instalado pelo Homebrew). Mas isso não funciona.

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

A saída esperada é:

Hello' World

A saída real é:

Hello<unknown character symbol> World

Eu também tentei:

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

Mas continuo recebendo um caractere não imprimível que é o byte '\ x92'.

O que estou fazendo de errado aqui?

    
por gkb0986 31.10.2014 / 22:15

1 resposta

0

Acabei de verificar completamente a página de informações de sed ( info sed ) e fiz uma boa experiência com vários métodos.

Minha conclusão: Você não pode obter o caractere representado por \x92 em uma classe de caracteres.

No entanto, você pode usar | .

Aqui estão algumas demonstrações:

$ 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
$ 
    
por 15.04.2016 / 21:52