Cat、Grep、重定向输出....空白文件?

Jef*_*rts 8 bash grep pipe cat

我刚跑

cat /opt/webapplications/Word/readme.log | grep -v 'Apple'
Run Code Online (Sandbox Code Playgroud)

并且我在 cli 上得到了我期望的输出,其中的所有行readme.log都不包含 ' Apple'...

接下来我跑...

cat /opt/webapplications/Word/readme.log | grep -v 'Apple' > /opt/webapplications/Word/readme.log
Run Code Online (Sandbox Code Playgroud)

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

任何人都可以向我解释为什么会发生这种情况,或者我应该采取的正确方法吗?

Jen*_*y D 14

发生这种情况是因为首先要做的>是创建它想要写入的文件 - 如果该文件已经存在,则其内容将被删除。(此外,根本不需要cat在您的语句中使用,因为它grep适用于文件,而不仅仅是适用于 STDIN。)

正确的方法是使用临时文件来读取或写入。所以要么

cp /opt/webapplications/Word/readme.log /tmp/readme.log
grep -v 'Apple' /tmp/readme.log > /opt/webapplications/Word/readme.log
Run Code Online (Sandbox Code Playgroud)

或者

grep -v 'Apple' /opt/webapplications/Word/readme.log > /tmp/readme.log
mv /tmp/readme.log /opt/webapplications/Word/readme.log
Run Code Online (Sandbox Code Playgroud)

会工作。