Posso ler e escrever no mesmo arquivo no Linux sem sobrescrevê-lo? [duplicado]

6

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.

    
por cwd 11.04.2012 / 21:15

2 respostas

10

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
    
por 11.04.2012 / 22:13
7

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.

    
por 11.04.2012 / 21:26