Respostas:
Basta usar essa sintaxe:
sed 's/馑//g' file1
Ou na forma de escape:
sed "s/$(echo -ne '\u9991')//g" file1
(Observe que as versões mais antigas do Bash e alguns shells não entendem echo -e '\u9991'
, portanto verifique primeiro.)
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
give 1
. 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 baixo C
.
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
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.
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
desativar arquivo de troca vim-E
Ex modo melhorado-s
modo silencioso+'%s/\%u9991//g'
executar o comando de substituição+wq
salvar e sairfile1
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.
$ echo "饥馑荐臻" | sed s/$'\u9991'//g
饥荐臻
echo 馑 | sed s/...//
imprime alguma coisa?