Bash
Cat,Grep,重定向輸出……空白文件?
我剛跑
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
會工作。