Por ejemplo:
sed 's/\u0091//g' file1
En este momento, tengo que hacer hexdump
para obtener el número hexadecimal y ponerlo de la sed
siguiente manera:
$ echo -ne '\u9991' | hexdump -C
00000000 e9 a6 91 |...|
00000003
Y entonces:
$ sed 's/\xe9\xa6\x91//g' file1
echo 馑 | sed s/...//
imprime algo?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
da1
. Si cuenta los bytes (wc -c
), volvería3
. ¿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 debajoC
.Perl puede hacer eso:
-CS
enciende UTF-8 para entrada, salida y error estándar.fuente
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.fuente
Esto funciona para mi:
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 Salirfuente
file1
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.
fuente
Funciona para mí con GNU sed (versión 4.2.1):
(Como otro reemplazo para
sed
usted también podría usar GNUawk
; pero no parece necesario).fuente