Preciso substituir todas as ocorrências de “asterisco de ponto final” conforme mostrado aqui:
blah blah .*:.*:.* blah blah
com:
[0-9][0-9]:[0-9][0-9]:[0-9][0-9]
para que o resultado final se pareça com este:
blah blah [0-9][0-9]:[0-9][0-9]:[0-9][0-9] blah blah
Tentei diferentes variações do seguinte, mas não funcionou:
%s_ .*:.*:.* _ [0-9][0-9]:[0-9][0-9]:[0-9][0-9] _g
Resposta
Você deu um exemplo de linha com “ponto asterisco” repetido três vezes, separados por dois pontos. Se seus dados sempre ficarão assim, você também pode ficar com Resposta de AlexP . Mas sua pergunta diz que você precisa substituir todas as ocorrências de “asterisco de ponto final”. Se essa declaração de o problema está correto, você deve usar
:%s/\.\*/[0-9][0-9]/g
que localizará e substituirá o “asterisco de ponto final” mesmo quando não aparecer em grupos de três.
Resposta
Para Vim:
Para sed
: sed -e "s/\.\*:\.\*:\.\*/[0-9][0-9]:[0-9][0-9]:[0-9][0-9]/g"
.
-
%
significa aplicar a substituição em todas as linhas; não é necessário emsed
onde, por padrão, o comando é aplicado a todas as linhas. -
\.
é um ponto final; um.
simples significa qualquer caractere. -
\*
é um asterisco; um*
simples significa 0 ou mais do átomo anterior.
Resposta
Usando o modificador nomagic
para o padrão no Vim:
:%s/\M.*/[0-9][0-9]/g
O \M
removerá a especialidade de .
e *
no padrão.
Veja :help magic
no Vim.