
可能的重複:
如何使 iconv 以轉換後的輸出取代輸入檔?
我經常使用其公共 DNS 名稱( )連接到 amazon ec2 ec2-12-34-56-78.compute-1.amazonaws.com
,因此我的known_hosts
檔案被大量ec2
條目淹沒,我永遠不會再使用。
我知道我可能可以使用sed -i
就地編輯,但我想使用grep
,所以我這樣做了:
grep -v ec2 ~/.ssh/known_hosts > ~/.ssh/known_hosts
這會留下known_hosts
一個空文件。如果我做:
grep -v ec2 ~/.ssh/known_hosts > ~/.ssh/tmp
mv ~/.ssh/tmp ~/.ssh/known_hosts
grep
那麼一切都很好,但我很困惑為什麼讀取和寫入同一個檔案會將其保留為空白,以及在使用、cat
等時是否有任何解決方法。
答案1
有一個名為的實用程序,sponge
它是更多實用程式套房。它就是為了這個目的而製作的。
grep -v ec2 ~/.ssh/known_hosts | sponge ~/.ssh/known_hosts
答案2
重定向是在命令運行之前由 shell 完成的。這意味著 shell 被告知在grep
有機會讀取檔案之前截斷該檔案。如果您使用 shell 重新導向,則無法解決此問題。