使用 SED 取消註釋設定檔行,並替換 Linux 設定檔中的文本

使用 SED 取消註釋設定檔行,並替換 Linux 設定檔中的文本

我正在嘗試自動設定/etc/ssh/sshd_config檔中的某些參數,最值得注意的是

#PermitRootLogin yes

#LoginGraceTime 2m

他們應該閱讀:

PermitRootLogin no
LoginGraceTime 60

我不是腳本高手,所以請耐心等待......

我嘗試sed -e 's/#LoginGraceTime 2m/LoginGraceTime 60/' /etc/ssh/sshd_config開始滾動,但得到了一個奇怪的結果。它只是簡單地顯示了我正在嘗試處理的文件...

有人可以直接讓我使用 sed 嗎?

答案1

將輸出重定向到臨時文件,然後將臨時文件重新命名為原始文件

sed -e 's/#LoginGraceTime 2m/LoginGraceTime 60/' /etc/ssh/sshd_config > /etc/ssh/sshd_config.tmp && mv -f /etc/ssh/sshd_config.tmp /etc/ssh/sshd_config

或者,如果您有 GNU,sed您可以使用-i就地編輯選項

sed -i -e 's/#LoginGraceTime 2m/LoginGraceTime 60/' /etc/ssh/sshd_config

答案2

與@Bodo的答案類似,但此解決方案保持原始行不變,並將修改後的版本添加到原始行下方。只有當您想保留原始行作為註釋時,這才有意義。

 sed -i'' -n 'p;s/#\(LoginGraceTime\) 2m/\1 60/p;s/#\(PermitRootLogin\) yes/\1 no/p' /etc/ssh/sshd_config

這裡我們使用一個捕獲組\(...\),它在替換中被替換\1(因為我們懶得再次輸入相同的字串)。

帶有選項的 sed-n僅輸出明確列印的行,因此第一個p命令用於列印未修改的行,接下來的兩個命令用於列印修改的行。

相關內容