SED e aspas de Unicode

0

Ao testar essa string:

“… so that’s that… ”

Os itens a seguir devem, mas não correspondem, às aspas de abertura e às reticências e espaços:

sed "s/\([“‘\"']…\) //g"

No entanto, isso corresponde corretamente à segunda elipse e ao espaço e às aspas de fechamento:

sed "s/… \([”’\"'.!?]\)/…/g"

Se eu dividir o primeiro, tudo funciona bem:

sed -e "s/\(“…\) //g" \
-e "s/\(‘…\) //g" \
-e "s/\(\"…\) //g" \
-e "s/\('…\) //g"

Então, por que não funciona quando é agrupado? Especialmente quando funciona bem com as aspas de fechamento.

    
por Jonathan Patt 02.01.2010 / 18:35

1 resposta

1

Qual versão do sed você está usando? Eu acredito que o GNU sed deve suportar caracteres Unicode, e seu exemplo funciona para mim no Linux (Ubuntu, com o ambiente UTF-8).

Se você estiver usando uma versão do sed que não seja compatível com Unicode, seu grupo de caracteres será interrompido porque corresponde apenas a um byte. Se sua linha de comando estiver usando uma codificação UTF-8, quando você disser , um sed não-compatível com Unicode verá três bytes, \xE2 , \x80 e \x9C . Isso aumentaria seu grupo de caracteres, que corresponderia apenas a um desses bytes por vez. Várias outras construções também falhariam, por exemplo. a”? é a letra "a", em seguida, dois bytes seguidos por um terceiro byte opcional, portanto, a por si só não corresponderia à expressão, embora pareça que deveria.

(Você pode querer considerar também a substituição do caractere de reticências por três pontos. Reticências é um caractere de compatibilidade no Unicode; geralmente é considerado mais moderno gravar os pontos e deixar a fonte cuidar da formatação.)

    
por 02.01.2010 / 22:41

Tags