web-dev-qa-db-fra.com

rechercher et remplacer l'incohérence entre vim et sed

En utilisant Ubuntu 12.04 et vim 2.22.0, pourquoi à l'intérieur du vim j'utiliserai:

:9s/\d\+/1/

pour changer le premier chiffre de la ligne mentionnée en 1, mais ne peut pas utiliser le même avec sed que:

sed -i '9s/\d\+/1/' /home/file/foo

Je ne reçois toujours aucune erreur ni aucune modification dans le fichier. Avons-nous une incohérence entre les fonctionnalités de la commande vim et sed?

1
Amir

sed et vim ne sont pas liés (en quelque sorte, mais c'est loin). Leurs commandes de substitution sont similaires, mais loin d'être identiques. Les deux utilisent des expressions régulières de base, mais vim a ses extensions pour lui, et GNU sed a d'autres extensions pour lui.

\d correspond à un chiffre dans vim, dans GNU sed il correspond à un d. Pour faire correspondre un chiffre à sed, utilisez [[:digit:]] ou [0-9] (et ceux-ci fonctionneront également dans vim).

\+ est également une extension à la fois dans vim et GNU sed. La façon standard de faire correspondre un ou plusieurs est d'utiliser \{1,\} au lieu.

4
geirha