Por exemplo:
sed 's/\u0091//g' file1
Agora, eu tenho que fazer hexdump
para obter o número hexadecimal e colocar da sed
seguinte maneira:
$ echo -ne '\u9991' | hexdump -C
00000000 e9 a6 91 |...|
00000003
E depois:
$ sed 's/\xe9\xa6\x91//g' file1
echo 馑 | sed s/...//
imprime alguma coisa?sed
possui o modificador g, ele substitui toda a ocorrência também quando eles se seguem. Também sed deve contar como um personagem, veja:echo -ne "馑" | wc -m
give1
. Se você contar os bytes (wc -c
), ele retornará3
. Entendi sua pergunta corretamente?.
significa "um caractere" ou "um byte"?echo 馑 | sed s/...//
me dá馑
(nada é substituído)en_US.UTF-8
, mas não em baixoC
.Perl pode fazer isso:
-CS
ativa o UTF-8 para entrada, saída e erro padrão.fonte
Várias versões de
sed
suporte Unicode :Não consegui encontrar informações sobre o BSD sed, o que achei estranho, mas acho boas as chances de ele também suportar o Unicode. Infelizmente, não há uma maneira padrão de dizer
sed
qual codificação usar, então cada um faz isso de sua própria maneira.fonte
Isso funciona para mim:
É uma gota mais detalhada do que eu gostaria; Aqui está uma explicação completa:
-n
desativar arquivo de troca vim-E
Ex modo melhorado-s
modo silencioso+'%s/\%u9991//g'
executar o comando de substituição+wq
salvar e sairfonte
file1
no local , está correto?Nas versões recentes do BASH, apenas omita as aspas em torno da expressão sed e você pode usar as strings de escape do BASH. Os espaços na expressão sed ou partes da expressão sed que possam ser interpretados pelo BASH como curingas podem ser citados individualmente.
fonte
Funciona para mim com o GNU sed (versão 4.2.1):
(Como outro substituto para
sed
você também pode usar o GNUawk
; mas não parece necessário.)fonte