我正在嘗試在 /etc/ssh/sshd_config 中查找和替換特定字串。
#PermitRootLogin yes> PermitRootLogin no。但是我想確保我得到它的幾乎任何版本(如果這有意義的話)。
前任;
#PermitRootLogin yes
PermitRootLogin yes
#PermitRootLogin no
我對 bash、linux、unix 等還很陌生,而且在過去的兩周里真的只是在學習這些東西,所以如果可能的話,請向我解釋一下,就像我是 linux/unix 的新手一樣。先感謝您。
到目前為止,我已經嘗試了兩件事,但他們似乎都沒有做我需要的事情。
sed -E 's/(#|^)PermitRootLogin(yes|no)/PermitRootLogin no/' FILENAME
和
sed -E 's/(#/|^/)PermitRootlogin(yes/|no/)/PermitRootLogin no/' FILENAME
我希望上面示例中的所有行都更改為;
PermitRootLogin no
PermitRootLogin no
PermitRootLogin no
uj5u.com熱心網友回復:
這個只是少了一個空格
sed -E 's/(#|^)PermitRootLogin(yes|no)/PermitRootLogin no/' FILENAME
# ............................^
我會建議
sed -E '/PermitRootLogin/ s/.*/PermitRootLogin no/' FILENAME
這意味著:對于包含字串“PermitRootLogin”的任何行,將整行替換為“PermitRootLogin no”
這個
sed -E 's/(#/|^/)PermitRootlogin(yes/|no/)/PermitRootLogin no/' FILENAME
/顯示了對sed中角色角色的一些誤解。
/不是正則運算式字符,它是s命令分隔正則運算式、替換文本和標志的分隔符。請參閱sed 手冊中的3.3 s 命令。
uj5u.com熱心網友回復:
使用您顯示的示例,請嘗試以下awk代碼。
awk '/^#?PermitRootLogin/{print "PermitRootLogin no"}' Input_file
說明:簡單的解釋是,檢查條件是否以行開頭#(保持可選),PermitRootLogin然后使用列印 PermitRootLogin,然后no根據要求。
注意:如果您想將更改保存到相同的 Input_file 中,請運行以下命令:awk '/^#?PermitRootLogin/{print "PermitRootLogin no""}' Input_file > temp && mv temp Input_file
uj5u.com熱心網友回復:
你可以使用這個sed:
sed -E 's/^#?(PermitRootLogin) .*/\1 no/' file
PermitRootLogin no
PermitRootLogin no
PermitRootLogin no
輸入檔案是這樣的:
cat file
#PermitRootLogin yes
PermitRootLogin yes
#PermitRootLogin no
解釋:
^: 開始#?: 匹配一個可選的#(PermitRootLogin):在第一組中匹配PermitRootLogin并捕獲,然后是 1 空格.*: 匹配任何內容直到行尾/\1 no/:替換部分將捕獲組 #1 的值放在空格和no
要將更改行內保存到檔案中,請使用:
sed -i.bak -E 's/^#?(PermitRootLogin) .*/\1 no/' file
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/447731.html
上一篇:Tomcat發送“Cross-Origin-Opener-Policy”和“Cross-Origin-Embedder-Policy”標頭以在JavaScript上啟用SharedArrayBuffe
