Eu apenas corri
cat /opt/webapplications/Word/readme.log | grep -v 'Apple'
e obtive a saída do CLI que eu esperava, que era todas as linhas readme.log
que não continham ' Apple
' ...
Em seguida eu corri ...
cat /opt/webapplications/Word/readme.log | grep -v 'Apple' > /opt/webapplications/Word/readme.log
No entanto, /opt/webapplications/Word/readme.log
está em branco.
Alguém pode me explicar por que isso aconteceu, ou a maneira correta que eu deveria ter feito isso?
Respostas:
Isso aconteceu porque a primeira coisa a
>
fazer é criar o arquivo no qual deseja gravar - e, se o arquivo já existir, seu conteúdo será excluído. (Além disso, não há necessidade de usarcat
em sua declaração, poisgrep
funciona em arquivos, não apenas em STDIN.)A maneira correta de fazer isso é usar um arquivo temporário para ler ou gravar. Então também
ou
podia funcionar.
fonte
Ao redirecionar para o mesmo arquivo (
>
), o shell pode criar / truncar o arquivo antes que ocat
comando seja chamado e a entrada seja lida (consulte: Por que “classificar arquivo1> arquivo1” não funciona? ). Se você deseja filtrar o arquivo, é melhor redirecionar a saída para um arquivo diferente ou evitar o redirecionamento, por exemplo:A maneira melhor e mais segura é usar editores no local projetados para esse tipo de operações, por exemplo
ou use
ex
(parte do Vim):Relacionado:
fonte