buscar y reemplazar en VI

buscar y reemplazar en VI

Necesito convertir '12.22.54' a '12:22:54' en una cadena a continuación para que funcione en 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');

Intenté abrir el archivo en vi y reemplazarlo como

:s/(\d\{2\})\.(\d\{2\}z)\.(\d\{2\})/$1:$2:$3/g

Pero no funciona. Por favor ayuda.

Respuesta1

Para evitar la dirección IP, simplemente pongo espacios alrededor de la cadena coincidente:

:%s/ \(\d\d\)\.\(\d\d\)\.\(\d\d\) / \1:\2:\3 /g

Respuesta2

vino utiliza expresiones regulares estilo perl. Tu escribiste

:s/(\d\{2\})\.(\d\{2\}z)\.(\d\{2\})/$1:$2:$3/g

pero viusa una sintaxis como esta (vim y vile aceptan \d, pero dijiste"vi"):

:s/\([[:digit:]]\{2\}\)\.\([[:digit:]]\{2\}\)\.\([[:digit:]]\{2\}\)/\1:\2:\3/g

(¿De dónde viene la "z"?).

El punto es que lo que Perl llama "obsoleto" es la sintaxis POSIX para referencias anteriores. Perl, por supuesto, nunca será estandarizado mientras Larry Wall esté presente.

Según el comentario, la intención del OP era cambiar todas las líneas. En vi, eso se hace usando el rango especial %:

:%s/\([[:digit:]]\{2\}\)\.\([[:digit:]]\{2\}\)\.\([[:digit:]]\{2\}\)/\1:\2:\3/g

También se podría usar un rango explícitamente ($es POSIX también):

:1,$s/\([[:digit:]]\{2\}\)\.\([[:digit:]]\{2\}\)\.\([[:digit:]]\{2\}\)/\1:\2:\3/g

Hay otras formas de construir los límites para evitar las direcciones IP. Pero con el ejemplo dado, un espacio en blanco es suficiente:

:s/ \([[:digit:]]\{2\}\)\.\([[:digit:]]\{2\}\)\.\([[:digit:]]\{2\}\) / \1:\2:\3 /g

Asimismo,empujeyvilaceptar \sespacios, pero POSIX aceptaría solo un espacio literal (como se muestra) o una clase de carácter [:space:]. A la mayoría de las personas les resulta [spacetab]menos complicado escribir que [[:space:]].

Como se señaló, si dice "vi", otros pueden optar por responder según el comportamiento estándar (POSIX). Algunos editores que se pueden utilizar en lugar de "vi" proporcionan extensiones a la sintaxis de las expresiones regulares. Una comprobación rápida muestra queelvistambién es compatible con el estilo Perl \dy \s, mientrasnvi(el que más se ajusta a los estándares de los cuatro) no.

información relacionada