J'ai besoin de nettoyer un fichier. Nous avons un analyseur xml qui s'exécute sur celui-ci qui échoue en raison d'un caractère d'échappement (0x1B) dans le fichier. Comment utiliser vim pour trouver où se trouve ce caractère dans le fichier afin de pouvoir le supprimer?
Exemple de fichier:
<?php
echo "Hello, world.\n";
?>
Après la conversion:
0000000: 0a3c 3f70 6870 0a65 6368 6f20 2248 656c .<?php.echo "Hel
0000010: 6c6f 2c20 776f 726c 642e 5c6e 223b 0a3f lo, world.\n";.?
0000020: 3e0a
Je supprime donc un caractère: (dans cet exemple, le "H")
0000000: 0a3c 3f70 6870 0a65 6368 6f20 22 656c .<?php.echo "Hel
0000010: 6c6f 2c20 776f 726c 642e 5c6e 223b 0a3f lo, world.\n";.?
0000020: 3e0a
Remarquez que la première ligne n'est plus assez large. Quand je le reconvertis, j'obtiens:
^@<?php
echo "el^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@>
Recherche (par exemple en utilisant /) pour \%x1b
.
Vous pouvez également saisir des caractères de contrôle, y compris d'échappement, dans la ligne de commande en les précédant de Ctrl-V. Alors tapez /, Ctrl-V, Esc, Enter.
Transformez vim en un éditeur hexadécimal en faisant [escape] :%!xxd
. Recherchez ensuite 0x1B (/1B
).
Vous pouvez découvrir ce qu'est une valeur hexadécimale d'un caractère en plaçant le curseur dessus et en appuyant sur ga
Ci-dessous, vous verrez une valeur hexadécimale du personnage. Exemple pour un <╬>
personnage
<╬> <| N> 206, Hex ce, oct. 316, Digr I>
Supprimez-le par:
%s/\%xce//g