2013-11-28 27 views
0

我的目標是創建一個腳本,對crontab執行以下更改。任何未註釋的cron條目都會被註釋,而任何註釋的條目都會被取消註釋。我的crontab的意見對他們有沒有號碼,所以我相信我已經設置了邏輯是合理的:sed:在crontab中切換註釋

1)備份的crontab 2)進行更改到crontab

  • 若行啓動任意數字,註釋行
  • 如果行以註釋後跟數字開頭,則取消註釋行 3)重新加載crontab。

我特別需要第2步。幫我已經使用這個評論ALL線,但我發現很難得到任何進一步:

sed -i 's/^\([^#]\)/#\1/g' Crontab.txt 

會有人對實現我的目標的任何建議以上?我會很感激任何幫助。

+0

近重複:HTTP://計算器。 COM /問題/ 3368955 /如何對做-A線作爲一種註釋,在-SID – tripleee

回答

3

您可以使用sed輕鬆切換評論。

sed -i '# If line is a comment, uncomment 
    # (replace \s with [ ] if your sed does not support \s for whitespace) 
    s/^\s*#// 
    # If the previous action did something, skip the rest 
    t 
    # If we are still here, comment out this entry 
    s/^/#/' Crontab.txt 

如果您sed方言不理解\s你可以從註釋使用替代[...]表達代替。 (這是一個空間和括號內的標籤,您可以在許多炮彈與CTRL-V標籤輸入文字標籤。)

要只撥動的第一個非註釋字符是數字,適應正則表達式略。

sed -i 's/#\([0-9]\)/\1/;t;s/^\([0-9]\)/#\1/' Crontab.txt 

此外,還存在一些方言變化;並非所有的sed實現在分組括號之前都需要反斜槓,而並非所有的sed實現都像分號一樣作爲語句分隔符。這裏的主要牛肉是使用反向引用來捕獲數字並在替換中引用它。

(星號也是一個crontab條目的第一個字段允許的字符;只是,如果你想包括它添加0-9後,在這兩個地方。)

0

我建議在3個步驟做:

  1. 更換領導#在註釋行與一些特殊的文字
  2. 前綴不與#
  3. 的特殊文本的所有行刪除特殊文本