Respuestas:
Solo usa esa sintaxis:
sed 's/馑//g' file1
O en la forma escapada:
sed "s/$(echo -ne '\u9991')//g" file1
(Tenga en cuenta que las versiones anteriores de Bash y algunos shells no entienden echo -e '\u9991'
, así que verifique primero).
sed
tiene el modificador g, reemplaza todas las ocurrencias también cuando se siguen. También sed debe contarlo como un personaje, ver: echo -ne "馑" | wc -m
da 1
. Si cuenta los bytes ( wc -c
), volvería 3
. ¿Entendí tu pregunta correctamente?
.
significa "un carácter" o "un byte"?
echo 馑 | sed s/...//
me da 馑
(nada se reemplaza)
en_US.UTF-8
, pero no debajo C
.
Perl puede hacer eso:
echo 汉典“馑”字的基本解释 | perl -CS -pe 's/\N{U+9991}/Jin/g'
-CS
enciende UTF-8 para entrada, salida y error estándar.
Una serie de versiones de sed
soporte Unicode :
No pude encontrar información sobre BSD sed, lo que me pareció extraño, pero creo que hay muchas posibilidades de que también sea compatible con Unicode. Desafortunadamente, no hay una forma estándar de saber sed
qué codificación usar, por lo que cada uno lo hace a su manera.
Esto funciona para mi:
$ vim -nEs +'%s/\%u9991//g' +wq file1
Es una gota más detallada de lo que me gustaría; Aquí hay una explicación completa:
-n
deshabilitar el archivo de intercambio vim-E
Ex modo mejorado-s
Modo silencioso+'%s/\%u9991//g'
ejecutar el comando de sustitución+wq
guardar y Salirfile1
en el lugar , ¿es correcto?
Con versiones recientes de BASH, solo omita las comillas alrededor de la expresión sed y puede usar las cadenas escapadas de BASH. Los espacios dentro de la expresión sed o partes de la expresión sed que BASH podría interpretar como comodines se pueden citar individualmente.
$ echo "饥馑荐臻" | sed s/$'\u9991'//g
饥荐臻
echo 馑 | sed s/...//
imprime algo?