2017-07-29 52 views
-2

我想使用bash腳本取消註釋行。通常我使用一個Perl命令替換文本,但在這種情況下,這並不工作:提前腳本中的取消註釋行

perl -pi -e "s[# %wheel ALL=(ALL) NOPASSWD: ALL][%wheel ALL=(ALL) NOPASSWD: ALL]g" /mnt/etc/sudoers 

感謝。

+2

「它沒有工作」不是一個很好的問題描述。 –

回答

2

( and )是正則表達式的元字符,它們有特殊的含義; they mean to capture what's inside it

/# %wheel ALL=(ALL) NOPASSWD: ALL/將不匹配# %wheel ALL=(ALL) NOPASSWD: ALL。它將匹配# %wheel ALL=ALL NOPASSWD: ALL(注意缺少parens)並在$1中捕獲ALL

您可以逃脫任何特殊的元字符與\/# %wheel ALL=\(ALL\) NOPASSWD: ALL/或者你可以聲明,一切要\Q\E之間字面理解。 /\Q# %wheel ALL=(ALL) NOPASSWD: ALL\E/