Excluir linha específica dos hosts

1

Desejo excluir uma linha específica do arquivo hosts no meu diretório inicial:

~$ echo "193.10.1.1 localhost" >> hosts
~$ echo "127.0.0.1 localhost" >> hosts
~$ cat hosts
193.10.1.1 localhost
127.0.0.1 localhost
~$ sed '/127.0.0.1/d' hosts > hosts
~$ cat hosts

Mas o arquivo está vazio. Como excluo a linha mactching e, em seguida, imprimo o resultado no arquivo?

    
por Igor Filippov 27.08.2012 / 10:39

1 resposta

4

O arquivo é truncado quando você redireciona a saída usando > , antes que o comando sed seja executado.

BSD sed

Use sed -i .bak '/^127\.0\.0\.1[[:space:]]/d' hosts para editar um arquivo em linha, salvando um backup com a extensão bak ou sed -i '' [...] para ignorar a criação do backup.

GNU sed

Use sed -ibak '/^127\.0\.0\.1[[:space:]]/d' hosts para editar um arquivo em linha, salvando um backup com a extensão bak ou sed -i [...] para ignorar a criação do backup.

Você também pode fazer isso manualmente, por exemplo, o seguinte:

sed '/^127\.0\.0\.1[[:space:]]/d' hosts > hosts.new
cat hosts.new > hosts
rm hosts.new

Embora essa seja mais uma linha que mv hosts.new hosts , ela reterá os metadados do arquivo de hosts .

    
por 27.08.2012 / 10:44

Tags