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 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
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.)
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.
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.
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.)
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