Preciso converter '12.22.54' para '12:22:54' em uma string abaixo para que funcione em 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');
Tentei abrir o arquivo no vi e substituir como
:s/(\d\{2\})\.(\d\{2\}z)\.(\d\{2\})/$1:$2:$3/g
Mas não está funcionando. Por favor ajude.
Responder1
Para evitar o endereço IP, apenas coloquei espaços ao redor da string correspondente:
:%s/ \(\d\d\)\.\(\d\d\)\.\(\d\d\) / \1:\2:\3 /g
Responder2
vi
não usa expressões regulares no estilo perl. Você escreveu
:s/(\d\{2\})\.(\d\{2\}z)\.(\d\{2\})/$1:$2:$3/g
mas vi
usa sintaxe como esta (vim e vil accept \d
, mas você disse"vi"):
:s/\([[:digit:]]\{2\}\)\.\([[:digit:]]\{2\}\)\.\([[:digit:]]\{2\}\)/\1:\2:\3/g
(De onde veio o "z"?).
A questão é que o que Perl chama de "obsoleto" é a sintaxe POSIX para referências anteriores. Perl, é claro, nunca será padronizado enquanto Larry Wall estiver por perto.
Por comentário, a intenção do OP era alterar todas as linhas. No vi, isso é feito usando o intervalo especial %
:
:%s/\([[:digit:]]\{2\}\)\.\([[:digit:]]\{2\}\)\.\([[:digit:]]\{2\}\)/\1:\2:\3/g
Também se poderia usar um intervalo explicitamente ($
também é POSIX):
:1,$s/\([[:digit:]]\{2\}\)\.\([[:digit:]]\{2\}\)\.\([[:digit:]]\{2\}\)/\1:\2:\3/g
Existem outras maneiras de construir limites para evitar endereços IP. Mas com o exemplo dado, basta um espaço em branco:
:s/ \([[:digit:]]\{2\}\)\.\([[:digit:]]\{2\}\)\.\([[:digit:]]\{2\}\) / \1:\2:\3 /g
Da mesma maneira,vimevilaceitar \s
para espaços, mas o POSIX aceitaria apenas um espaço literal (como mostrado) ou uma classe de caracteres [:space:]
. A maioria das pessoas acha que digitar é [spacetab]menos problemático do que [[:space:]]
.
Conforme observado, se você disser "vi", outras pessoas poderão optar por responder com base no comportamento padrão (POSIX). Alguns editores que podem ser usados no lugar de "vi" fornecem extensões para a sintaxe da expressão regular. Uma verificação rápida mostra queElvistambém suporta o estilo Perl \d
e \s
, enquantonvi(o mais compatível com os padrões dos quatro) não.