web-dev-qa-db-fra.com

Comment remplacer ou trouver des caractères non imprimables dans vim regex?

J'ai un fichier avec des caractères non imprimables qui apparaissent comme ^ C ou ^ B, je veux trouver et remplacer ces caractères, comment dois-je procéder?

38
Charles Ma

Supposons que vous souhaitiez remplacer ^ C par C:

:%s/CtrlVC/C/g

Où CtrlVC signifie type V puis C tout en maintenant Ctrl pressé.

CtrlV vous permet de saisir des caractères de contrôle.

37
ars

Suppression des symboles de contrôle uniquement:

:%s/[[:cntrl:]]//g

Suppression de caractères non imprimables (notez que dans les versions antérieures à ~ 8.1.1, cela supprime également les caractères non ASCII):

:%s/[^[:print:]]//g

La différence entre eux pourrait être vue si vous avez des caractères non imprimables et non contrôlables, par exemple espace de largeur nulle :

enter image description here

69
lincz

Essayez ceci après avoir enregistré votre fichier dans vim (en supposant que vous êtes dans un environnement Linux)

:%!tr -cd '[:print:]\n'
10
ticktock

Aucune des réponses ici utilisant les caractères de contrôle de Vim n'a fonctionné pour moi. J'ai dû entrer dans une plage unicode.

:%s/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x9F]//g

Cette plage unicode a été trouvée sur cet autre article: https://stackoverflow.com/a/8171868/231914

6
Dalin

Vous pouvez utiliser:

:%s/^C//g

Pour obtenir le ^C maintenez la touche de contrôle, appuyez sur V puis C (les deux en maintenant la touche de contrôle) et ^C apparaîtra. Cela trouvera toutes les occurrences et les remplacera par rien.

Pour supprimer les deux ^C et ^B tu peux faire:

:%s/^C\|^B//g
5
codaddict

Vous pouvez utiliser le CTRL-V préfixe pour les saisir, ou s'ils ne sont pas faciles à taper, tirez et insérez-les en utilisant CTRL-R".

5
Pi Delport