Cat, Grep, Redirect Output … File vuoto?

Corsi solo

cat /opt/webapplications/Word/readme.log | grep -v 'Apple' 

e ho ottenuto l'output sul cli che mi aspettavo, che era tutte le linee in readme.log che non contenevano ' Apple ' …

  • Scrittura a stdin del process di fondo
  • Come installare i pacchetti con APT senza l'interazione con l'utente?
  • Script BASH che esegue test per IP
  • come fare dos2unix a * .tpl ricorsivo in Linux?
  • Estrarre una sezione di linea del backup di mysql utilizzando sed
  • Combina più comandi unix in un'output
  • Successivamente ho corso …

     cat /opt/webapplications/Word/readme.log | grep -v 'Apple' > /opt/webapplications/Word/readme.log 

    Tuttavia, /opt/webapplications/Word/readme.log è vuoto.

    Qualcuno può spiegarmi perché questo è successo, o il modo corretto che avrei dovuto fare?

    2 Solutions collect form web for “Cat, Grep, Redirect Output … File vuoto?”

    Ciò è accaduto perché la prima cosa > è creare il file che vuole scrivere a – e se il file esiste già, il suo contenuto verrà eliminato. (Inoltre, non esiste alcuna necessità di utilizzare il cat nella tua dichiarazione poiché grep lavora su file, non solo su STDIN.)

    Il modo corretto per farlo è quello di utilizzare un file temporaneo da leggere o da scrivere. Quindi neanche

     cp /opt/webapplications/Word/readme.log /tmp/readme.log grep -v 'Apple' /tmp/readme.log > /opt/webapplications/Word/readme.log 

    o

     grep -v 'Apple' /opt/webapplications/Word/readme.log > /tmp/readme.log mv /tmp/readme.log /opt/webapplications/Word/readme.log 

    functionrebbe.

    Quando si effettua il reindirizzamento nello stesso file ( > ), la shell può creare / troncare il file prima che il command di cat venga richiamato e l'input sia letto (vedere: Perché non viene "ordinato file1> file1"? ). Se si desidera filtrare il file, è meglio redirect l'output in un file diverso oppure evitare di redirect, ad esempio:

     grep -v 'Apple' readme.log | tee readme.log 

    Il modo migliore e più sicuro è quello di utilizzare editor in loco progettati per tale tipo di operazioni, ad esempio

     sed -i '.bak' '/Apple/d' readme.log 

    o utilizzare ex (parte di Vim):

     ex +g/Apple/d -cwq readme.log 

    Relazionato:

    • Elimina righe in un file di text contenente una string specifica in SO
    • Reindirizzare l'input dal file di nuovo nello stesso file in SO
    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.