
Possível duplicata:
Como posso fazer com que o iconv substitua o arquivo de entrada pela saída convertida?
Eu freqüentemente me conecto ao amazon ec2 usando seus nomes DNS públicos
( ec2-12-34-56-78.compute-1.amazonaws.com
) e por causa disso meu known_hosts
arquivo fica sobrecarregado com muitas ec2
entradas que nunca mais usarei.
Eu sei que provavelmente poderia usar sed -i
para editar no local, mas eu queria usar grep
e então fiz isso:
grep -v ec2 ~/.ssh/known_hosts > ~/.ssh/known_hosts
Isso deixa known_hosts
um arquivo vazio. Se eu fizer:
grep -v ec2 ~/.ssh/known_hosts > ~/.ssh/tmp
mv ~/.ssh/tmp ~/.ssh/known_hosts
então está tudo bem, mas estou confuso por que ler e gravar no mesmo arquivo o deixa em branco e se há alguma maneira de contornar isso ao usar grep
, cat
, etc.
Responder1
Existe um utilitário chamado sponge
que faz parte domaisutilssuíte. Foi feito exatamente para esse propósito.
grep -v ec2 ~/.ssh/known_hosts | sponge ~/.ssh/known_hosts
Responder2
Os redirecionamentos são feitos pelo shell, antes da execução do comando. Isso significa que o shell é instruído a truncar o arquivo antes de grep
poder lê-lo. Não há como contornar isso se você estiver usando o redirecionamento de shell.