Bash

Cat,Grep,重定向輸出……空白文件?

  • April 17, 2016

我剛跑

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

我在 cli 上得到了我所期待的輸出,其中所有的行readme.log都不包含 ’ Apple’…

接下來我跑了…

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

然而,/opt/webapplications/Word/readme.log是空白的。

誰能向我解釋為什麼會發生這種情況,或者我應該採取的正確方法?

發生這種情況是因為首先要做的>是創建它想要寫入的文件 - 如果該文件已經存在,它的內容將被刪除。(此外,根本不需要cat在您的語句中使用,因為grep它適用於文件,而不僅僅是 STDIN。)

正確的方法是使用臨時文件進行讀取或寫入。所以要麼

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

或者

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

會工作。

引用自:https://serverfault.com/questions/770942