使用 GNU SED 註解行並新增行

使用 GNU SED 註解行並新增行

假設我想在 RHEL 7 中編輯 /etc/ssh/sshd_config 檔案以保護我們的 ssh 設定。

我想替換讓我們以 Ciphers 行為例,保留原來的位置並將其註解掉。我還希望能夠盡可能關閉字串的最小部分,以避免 Red Hat 每次更新 rpm/安裝 iso 時都破壞它。

Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc

應該成為...

#Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc
Ciphers abc-123,def-456,ghi-789 etc...

我嘗試在檔案名稱是 testfile 的測試檔案中尋找/新增換行符,內容是這是我的測試檔案。我嘗試添加“不,它不是新行”,但慘敗。

sed -i '/This is my test file./aNo it's not.' testfile

我將如何做,​​更重要的是,它背後的關鍵概念是什麼?

答案1

我嘗試過使用下面的 sed 命令,它的效果非常好

命令

sed -i '/^Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes192-cbc,aes256-c/s/.*/#&\nCiphers abc-123,def-456,ghi-789/g' filename

輸出

#Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc
Ciphers abc-123,def-456,ghi-789

答案2

sed -i -n 'p; s/^Ciphers/#&/p' /etc/ssh/sshd_config

-i到位

-n除非明確列印,否則不列印任何內容

/p在搜尋字串末尾強制列印,有效地覆蓋-n匹配的字串

相關內容