Par exemple:
sed 's/\u0091//g' file1
En ce moment, je dois faire hexdump
pour obtenir le numéro hexadécimal et le mettre sed
comme suit:
$ echo -ne '\u9991' | hexdump -C
00000000 e9 a6 91 |...|
00000003
Et alors:
$ sed 's/\xe9\xa6\x91//g' file1
echo 馑 | sed s/...//
n'imprime rien?sed
le modificateur g, il remplace toutes les occurrences également lorsqu'elles se succèdent. Aussi, sed devrait le compter comme un caractère, voir:echo -ne "馑" | wc -m
donne1
. Si vous comptez le nombre d'octets (wc -c
), il retournera3
. Ai-je bien compris votre question?.
signifie "un caractère" ou "un octet"?echo 馑 | sed s/...//
me donne donc馑
(rien n'est remplacé)en_US.UTF-8
, mais pas sousC
.Perl peut le faire:
-CS
active UTF-8 pour les entrées, sorties et erreurs standard.la source
Un certain nombre de versions du
sed
support Unicode :Je ne pouvais pas trouver d'informations sur BSD sed, ce qui me paraissait étrange, mais je pense que les chances sont bonnes qu'il prenne également en charge Unicode. Malheureusement, il n'existe pas de méthode standard permettant de déterminer le
sed
codage à utiliser. Chacun le fait à sa manière.la source
Cela fonctionne pour moi:
C'est une goutte plus verbeuse que je ne l'aimerais; voici une explication complète:
-n
désactiver le fichier d'échange vim-E
Mode amélioré Ex-s
mode silencieux+'%s/\%u9991//g'
exécuter la commande de substitution+wq
sauvegarder et quitterla source
file1
en place , est-ce correct?Avec les versions récentes de BASH, omettez simplement les guillemets autour de l'expression sed et vous pouvez utiliser les chaînes échappées de BASH. Les espaces dans l'expression sed ou des parties de l'expression sed qui pourraient être interprétées par BASH comme des caractères génériques peuvent être individuellement cités.
la source
Fonctionne pour moi avec GNU sed (version 4.2.1):
(Un autre remplaçant pour
sed
vous pourrait également utiliser GNUawk
; mais cela ne semble pas nécessaire.)la source