Existe uma alternativa para sed que suporte unicode?

26

Por exemplo:

sed 's/\u0091//g' file1

Neste momento, tenho que fazer hexdump para obter o número hexadecimal e colocar em sed da seguinte forma:

$ echo -ne '\u9991' | hexdump -C
00000000  e9 a6 91                                          |...|
00000003

E então:

$ sed 's/\xe9\xa6\x91//g' file1
    
por A-letubby 17.04.2015 / 10:38

5 respostas

23

Use apenas essa sintaxe:

sed 's/馑//g' file1

Ou no formulário de escape:

sed "s/$(echo -ne '\u9991')//g" file1

(Note que versões mais antigas do Bash e algumas shells não entendem echo -e '\u9991' , então verifique primeiro.)

    
por 17.04.2015 / 10:46
15

Perl pode fazer isso:

echo 汉典“馑”字的基本解释 | perl -CS -pe 's/\N{U+9991}/Jin/g'

-CS ativa o UTF-8 para entrada, saída e erro padrão.

    
por 17.04.2015 / 10:50
6

Várias versões de sed suportam Unicode :

Não consegui encontrar informações sobre o BSD sed, o que achei estranho, mas acho que as chances são boas de que ele também seja compatível com o Unicode. Infelizmente, não existe uma maneira padrão de dizer a sed qual codificação usar, então cada um faz isso de suas próprias maneiras.

    
por 17.04.2015 / 14:54
0

Funciona para mim com o GNU sed (versão 4.2.1):

$ echo -ne $'\u9991' | sed 's/\xe9\xa6\x91//g' | hexdump -C
$ echo -ne $'\u9991' | hexdump -C
00000000  e9 a6 91

(Como outro substituto para sed você também pode usar o GNU awk ; mas não parece necessário.)

    
por 17.04.2015 / 12:16
0

Isso funciona para mim:

$ vim -nEs +'%s/\%u9991//g' +wq file1

É uma gota mais detalhada do que eu gostaria; aqui está uma explicação completa:

  • -n desabilitar o arquivo de permuta vim
  • -E Ex melhorou o modo
  • -s modo silencioso
  • +'%s/\%u9991//g' executa o comando de substituição
  • +wq salvar e sair
por 17.04.2018 / 20:21