web-dev-qa-db-fra.com

Utilisez vim pour rechercher par code hexadécimal

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^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@> 
44
David Oneill

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-VEscEnter.

59
Nefrubyr

Transformez vim en un éditeur hexadécimal en faisant [escape] :%!xxd. Recherchez ensuite 0x1B (/1B).

11
Alexander Gessler

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 
1
Dani Konoplya