2014-10-27 131 views
0

我試圖通過shell腳本在/etc/sudoers中評論一行。 這是相關行我想編輯:Sed:如何替換包含多個特殊字符的字符串?

# grep '\!requiretty' /etc/sudoers 
Defaults:nagios !requiretty 

但好像我使用的是sed的模式不正確,我的嘗試:

# sed -i 's/^Defaults\:nagios$/#Defaults:nagios !requiretty/g' /etc/sudoers 
# sed -i 's/^Defaults:nagios$/#Defaults:nagios !requiretty/g' /etc/sudoers 
# sed -i 's/^Defaults:nagios$/#Defaults:nagios !requiretty/g' /etc/sudoers 
# sed -i 's/^Defaults:nagios$/\#Defaults:nagios !requiretty/g' /etc/sudoers 
# sed -i 's/^Defaults:nagios$/\#Defaults:nagios \!requiretty/g' /etc/sudoers 
# sed -i 's/^Defaults:nagios$/^#Defaults:nagios !requiretty/g' /etc/sudoers 
# sed -i 's/^Defaults\:nagios$/^#Defaults:nagios !requiretty/g' /etc/sudoers 
# sed -i 's/^Defaults\:nagios$/#Defaults:nagios \!requiretty/g' /etc/sudoers 

工作的以上都不是。 ..

有人可以請幫助我正確的正則表達式嗎?提前

+2

從你的描述,目前還不清楚我是什麼行看起來像以前一樣,它應是什麼樣的編輯之後。瞭解其他線路的外觀也很重要。如果沒有類似的文件,那麼正則表達式可以更簡單...提示:當開發一個正則表達式開始時使用最簡單的部分並逐步添加細節。這樣你就會知道哪部分工作。 – 2014-10-27 19:17:14

回答

1

感謝嗯... sudoers並不意味着被任何人寫的 - 甚至根本。出於安全原因,您應該使用visudo命令編輯它。

我認爲你可能會倒退,因爲sed替代的第一部分是找到。第二部分是替代品。所以你會想這樣做:

sed -i 's/^Defaults:nagios !requiretty$/#Defaults:nagios/' 

這也將刪除requiretty。如果你想要的是添加#,你可以只是做:

sed -i 's/^Defaults:nagios !requiretty$/#&/' 
+0

感謝您的回覆,您的第二條命令就是我正在尋找的命令。 '&'代表sed的'find'模式嗎? – 2014-10-27 19:21:25

+0

@ItaiGanot非常多 - 這是第0場比賽或任何與該模式相匹配的東西。你也可以對其他捕獲組使用'\ 1'等,但是你沒有用這種模式進行捕獲。 – 2014-10-27 19:25:26

相關問題