Awk

如何通過腳本在關鍵字或字元串之後將一行插入 crontab

  • February 26, 2019

我知道有很多關於通過腳本編輯 crontab 的文件,我可以通過使用以下命令添加一個條目來做到這一點:

line="* * * * * /my/folder/script.sh"
( crontab -l ; echo "$line" ) | crontab -

但是,我自己和其他一些人在超級使用者下的 crontab 中都有自己的“部分”。

如何在關鍵字或字元串下插入此行,例如在包含的行下,SPECIAL_JOB以免打擾其他人的部分和條目?我不想繼續在 crontab 底部添加新作業。

cron 條目如下所示:

# SPECIAL_JOB
* * * * * /my/folder/script.sh

理想情況下,我會刪除這一行的前一個條目,以使用以下方法保留一個新條目:

#remove entry
crontab -l | grep -ve '/my/folder/script.sh' | crontab -

這將在所有# SPECIAL_JOB行之後插入$line字元串。

crontab -l | sed '/# SPECIAL_JOB/a'"$line" | crontab -

為了避免替換文本中的特殊字元出現任何問題,我會將新的 cron 條目放入一個名為 example 的文件中new-entry,然後使用:

{ crontab -l | sed '/^# SPECIAL_JOB/{
n
r /path/to/new-entry
d
}' } | crontab -

我將 subshel​​l 括號(…更改)為簡單的花括號{},因為實際上不需要創建 subshel​​l;也沒有壞處!

然後我使用 sed 解析傳入的文本;它查找以開頭的行,# SPECIAL_JOB然後執行三個操作:

  1. 列印目前行,然後讀入下一行(讓我們# SPECIAL_JOB列印)
  2. r從您的文件中讀取作業
  3. d然後刪除曾經跟隨的行# SPECIAL_JOB- 舊作業。

引用自:https://unix.stackexchange.com/questions/503143