J'ai besoin de convertir '12 .22.54 'en '12: 22: 54' dans une chaîne ci-dessous pour que cela fonctionne dans MS SQL.
cast('14-JAN-14 06.65.22 AM' as datetime),'63.124.79.253');
cast('14-JAN-14 12.22.36 AM' as datetime),'63.124.79.253');
cast('14-JAN-14 22.13.54 AM' as datetime),'63.124.79.253');
J'ai essayé d'ouvrir le fichier dans vi et remplacer comme
:s/(\d\{2\})\.(\d\{2\}z)\.(\d\{2\})/$1:$2:$3/g
Mais ça ne marche pas. S'il vous plaît aider.
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é?Réponses:
Pour éviter l'adresse IP, je viens de mettre des espaces autour de la chaîne correspondante:
la source
vi
n'utilise pas d'expressions régulières de style perl. Tu as écritmais
vi
utilise une syntaxe comme celle-ci (vim et vile accept\d
, mais vous avez dit "vi" ):(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
%
:On pourrait aussi utiliser explicitement une plage (
$
POSIX également ):Il existe d'autres moyens de construire les limites pour éviter les adresses IP. Mais avec l'exemple donné, un blanc suffit:
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.la source