假設我想在 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
匹配的字串