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)
会工作。
归档时间: |
|
查看次数: |
2764 次 |
最近记录: |