Posso ler e gravar no mesmo arquivo no Linux sem sobrescrevê-lo?

Posso ler e gravar no mesmo arquivo no Linux sem sobrescrevê-lo?

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_hostsarquivo fica sobrecarregado com muitas ec2entradas que nunca mais usarei.

Eu sei que provavelmente poderia usar sed -ipara editar no local, mas eu queria usar grepe então fiz isso:

grep -v ec2 ~/.ssh/known_hosts > ~/.ssh/known_hosts

Isso deixa known_hostsum 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 spongeque 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 greppoder lê-lo. Não há como contornar isso se você estiver usando o redirecionamento de shell.

informação relacionada