vi
n'utilise pas d'expressions régulières de style perl. Tu as écrit
:s/(\d\{2\})\.(\d\{2\}z)\.(\d\{2\})/$1:$2:$3/g
mais vi
utilise une syntaxe comme celle-ci (vim et vile accept \d
, mais vous avez dit "vi" ):
:s/\([[:digit:]]\{2\}\)\.\([[:digit:]]\{2\}\)\.\([[:digit:]]\{2\}\)/\1:\2:\3/g
(D'où vient le "z"?).
Le fait est que ce que Perl appelle "obsolète" est la syntaxe POSIX pour les références arrière. Bien entendu, Perl ne sera jamais normalisé tant que Larry Wall sera présent.
Selon les commentaires, l'objectif du PO était de changer toutes les lignes. Dans vi, cela se fait en utilisant la plage spéciale %
:
:%s/\([[:digit:]]\{2\}\)\.\([[:digit:]]\{2\}\)\.\([[:digit:]]\{2\}\)/\1:\2:\3/g
On pourrait aussi utiliser explicitement une plage ( $
POSIX également ):
:1,$s/\([[:digit:]]\{2\}\)\.\([[:digit:]]\{2\}\)\.\([[:digit:]]\{2\}\)/\1:\2:\3/g
Il existe d'autres moyens de construire les limites pour éviter les adresses IP. Mais avec l'exemple donné, un blanc suffit:
:s/ \([[:digit:]]\{2\}\)\.\([[:digit:]]\{2\}\)\.\([[:digit:]]\{2\}\) / \1:\2:\3 /g
De même, vim et vile acceptent \s
des espaces, mais POSIX n'accepterait qu'un espace littéral (comme indiqué) ou une classe de caractères [:space:]
. La plupart des gens trouvent [spacetab]moins de problèmes à taper que [[:space:]]
.
Comme indiqué, si vous dites "vi", d'autres peuvent choisir de répondre en fonction du comportement standard (POSIX). Certains éditeurs pouvant être utilisés à la place de "vi" fournissent des extensions à la syntaxe des expressions rationnelles. Une vérification rapide montre qu'elvis prend également en charge le style Perl \d
et \s
que nvi (le plus conforme des quatre) ne le prend pas.
06.65.22
n’est pas une heure valide dans n’importe quel format, et vous avez ce qui semble être 24 heures suffixées de suffixe AM. Est-ce textuellement du fichier ou l'avez-vous expurgé?