Substituindo. * In vi

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 em sed 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.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *