運行Fedora 25服務器版。 sed --version
給我sed (GNU sed) 4.2.2
以及通常的版權和聯繫信息。我已經創建了一個文本文件sudo vi ./potential_sed_bug
。 VI顯示該文件的內容(與:set list
啓用)爲:爲什麼「sed -n -i」刪除現有的文件內容?
don't$
delete$
me$
please$
我然後運行以下命令:
sudo sed -n -i.bak /please/a\testing ./potential_sed_bug
在我們討論的結果;這裏是什麼sed man page說:
-n,--quiet,--silent 抑制模式空間的自動打印
和
-i [後綴] - 就地編輯[=後綴] 編輯文件(如果提供了擴展名,則進行備份)。默認操作模式是中斷符號鏈接和硬鏈接。這可以通過--follow-symlinks和--copy來改變。
我也看了other sed command references瞭解如何追加sed。根據我對我所做的研究的理解;生成的文件內容應該是:
don't
delete
me
please
testing
但是,運行sudo cat ./potential_sed_bug
給我下面的輸出:
testing
在這種差異的光,是我,我跑不正確或命令的理解是有sed /環境有問題嗎?
@AMemberofDollars:這樣做的缺點:處理的順序沒有改變,是的,臨時文件首先被寫入,只有在完成它取代原來的 - 請我的更新。 – mklement0
@stevesliva:我明白了,謝謝。我已經相應地更新了答案。 – mklement0
有趣的是,我一直認爲'sed -e cmd1 | sed -e cmd2'相當於'sed -e cmd1 -e cmd2',但是如果由於某種原因你想要修改的內容是你正在追加的內容,那麼這個區域實際上就是想要sed到sed的。我想'n'和'q'其他命令也會打破這種等價性。 – stevesliva