procura e substitui em VI

0

Eu preciso converter '12 .22.54 'para '12: 22: 54' em uma string abaixo para que ele funcione no 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');

Eu 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.

    
por user1001836 03.06.2015 / 01:50

2 respostas

0

Para evitar o endereço IP, basta colocar espaços ao redor da string correspondente:

:%s/ \(\d\d\)\.\(\d\d\)\.\(\d\d\) / :: /g
    
por 03.06.2015 / 02:14
1

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 uma sintaxe como essa (vim e vil aceitam \d , mas você disse " vi "):

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

(De onde veio o "z"?).

O ponto é 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 mudar todas as linhas. No vi, isso é feito usando o intervalo especial % :

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

Também é possível usar um intervalo explicitamente ( $ é POSIX também ) :

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

Existem outras maneiras de construir os limites para evitar endereços IP. Mas com o exemplo dado, um espaço em branco é suficiente:

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

Da mesma forma, vim e vile aceita \s para espaços, mas o POSIX aceitaria apenas um espaço literal (como mostrado) ou uma classe de caractere [:space:] . A maioria das pessoas acha que digitar [ espaço tab ] é menos problemático que [[:space:]] .

Como observado, se você disser "vi", os outros podem 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 que elvis também suporta o estilo Perl \d e \s , enquanto nvi (o mais compatível com os quatro padrões) não.

    
por 03.06.2015 / 02:13

Tags