Bash
sed regexp /d 刪除整個文件
給定一個典型的 known_hosts 文件:
[123.45.67.89]:22 ssh-rsa bbuivvhbkbjdnflksndkfnksnfk... [98.76.54.32]:14444 ssh-rsa hohdibsodbfoasbfbsabdfbsd... [77.34.122.33]:32209 ssh-rsa bksdjncknsdbcksbdcbhdhhb...
不知道文件中的 line#,但知道 ip 地址。
以下將刪除文件中的所有行:
sed '/98\.76\.54\.32/d known_hosts > known_hosts'
我希望我只是錯過了一些荒謬的簡單事情。
在這裡測試我的正則表達式給了我我需要的匹配,我的印像是:
sed '/pattern/d' file > file
*應該只刪除/pattern/*匹配的第一行。
我知道我不是正則表達式大師也不是 bash 大師,但我認真地認為這不會是一場多次搜尋、兩次咖啡大戰。誰能給我一根骨頭?
編輯:幾分鐘內有 4 個答案,好吧。我知道這很荒謬。希望我的愚蠢出現在別人的搜尋中。
您必須使用(就地編輯文件)
-i
選項:sed
sed -i '/98\.76\.54\.32/d' known_hosts
如果您像以前一樣執行輸出重定向,則會立即清空文件(在其內容被 讀取之前
sed
)。如果要使用重定向,則必須使用臨時輸出文件:sed '/98\.76\.54\.32/d' known_hosts > known_hosts.tmp mv known_hosts.tmp known_hosts
代替 sed,使用
ssh-keygen -R 98.76.54.32
-R hostname
從 known_hosts 文件中刪除屬於 hostname 的所有鍵。此選項對於刪除散列主機很有用(請參閱上面的 -H 選項)