Para remover comentários de linhas que têm um IP começando com 10.4
(isso removerá o primeiro #
, suponho que você nunca terá mais):
sed -i '/^#10\.4/{s/^#//}' /etc/hosts
Para adicionar um comentário a essas linhas:
sed -i '/^10\.4/{s/^/#/}' /etc/hosts
Então, por que a sua falha? Você estava usando c\
, o que significa:
c\
textDelete the lines matching the address or address-range, and output the lines of text which follow this command (each but the last ending with a \, which are removed from the output) in place of the last line (or in place of each line, if no addresses were specified). A new cycle is started after this command is done, since the pattern space will have been deleted.
Então, quando você executou sed -i '/#10\.4\..*/c\.4\..*' /etc/hosts
, isso significava "substituir #10\.4\..*
pela string literal #10\.4\..*
". O que você queria fazer é:
sed -i 's/#10\.4\.\(.*\)/10.4./' /etc/hosts'
O texto acima usa um operador de substituição ( s/from/to/
) e captura de padrão, o primeiro padrão em \( \)
pode ser referido como , o segundo como
etc. Como você pode ver na resposta de Michael não é necessário, você pode simplesmente substituir
#10.4
por 10.4
. Ou, como na minha resposta acima, você pode simplesmente remover o #
sozinho.