pesquisar e substituir no VI

pesquisar e substituir no VI

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

vinão usa expressões regulares no estilo perl. Você escreveu

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

mas viusa 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 \spara 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 \de \s, enquantonvi(o mais compatível com os padrões dos quatro) não.

informação relacionada