Vim: substitua todas as linhas que começam com string com line

9

Neste texto

hardware mac 33:33:333:33:33
hardware mac 33:13:333:33:33
hardware mac 33:23:333:23:34
hardware mac 33:033:133:33:35
...

Quero substituir todas as linhas que começam com hardware mac por

hardware mac 00:00:00:00:00:00

eu tentei

sed s/^hardware mac/hardware mac 00:00:00:00:00:00/gc

e dar erro

também o comando vim clássico

%s:/^hardware mac/hardware mac 00:00:00:00:00:00/gc

Mas altere apenas o hardware do hardware da string, deixando os números intocados. Como substituir a string iniciada pelo hardware mac pela minha string?

elbarna
fonte

Respostas:

14

Você quase acertou, apenas esqueceu de combinar o resto da linha (ativado vim):

:%s/^hardware mac.*/hardware mac 00:00:00:00:00:00/gc

Você pode descartar as gcopções no final, se tiver certeza do que está fazendo, gprovavelmente não será necessário, pois você não corresponderá mais de uma vez por linha.

Com sedisso é a mesma coisa:

sed -i 's/^hardware mac.*/hardware mac 00:00:00:00:00:00/' filename

Observe que sedo comando de substituição snão aceita um csinalizador (confirmar), como o vimfaz.

Kira
fonte
+1 FWIW o gem /gcé redundante, uma vez que este regex só pode corresponder a um por linha de qualquer maneira.
Sparhawk
Eu estava editando minha resposta enquanto você escrevia este comentário (=
Kira
Observe que essa sedsintaxe é do estilo GNU. Nem todas as versões suportam -ie algumas requerem um argumento.
Eric Renouf