Existe um utilitário chamado sponge
que faz parte do pacote moreutils . Foi feito para este propósito exato.
grep -v ec2 ~/.ssh/known_hosts | sponge ~/.ssh/known_hosts
Eu freqüentemente me conecto à amazon ec2 usando seus nomes DNS públicos ( ec2-12-34-56-78.compute-1.amazonaws.com
) e, por causa disso, meu arquivo known_hosts
fica sobrecarregado com muitas entradas ec2
que nunca mais usarei.
Eu sei que provavelmente poderia usar sed -i
para editar no lugar, mas eu queria usar grep
e então fiz isso:
grep -v ec2 ~/.ssh/known_hosts > ~/.ssh/known_hosts
Isso deixa known_hosts
como um arquivo vazio. Se eu fizer:
grep -v ec2 ~/.ssh/known_hosts > ~/.ssh/tmp
mv ~/.ssh/tmp ~/.ssh/known_hosts
então as coisas estão bem, mas estou confuso porque ler e escrever no mesmo arquivo deixa em branco, e se há alguma maneira de contornar isso quando usar grep
, cat
, etc.
Existe um utilitário chamado sponge
que faz parte do pacote moreutils . Foi feito para este propósito exato.
grep -v ec2 ~/.ssh/known_hosts | sponge ~/.ssh/known_hosts
Redirecionamentos são feitos pelo shell, antes do comando ser executado. Isso significa que o shell é instruído a truncar o arquivo antes que grep
tenha a chance de lê-lo. Não há como evitar isso se você estiver usando o redirecionamento de shell.