Awk
如何通過腳本在關鍵字或字元串之後將一行插入 crontab
我知道有很多關於通過腳本編輯 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 -
我將 subshell 括號
(
…更改)
為簡單的花括號{
…}
,因為實際上不需要創建 subshell;也沒有壞處!然後我使用 sed 解析傳入的文本;它查找以開頭的行,
# SPECIAL_JOB
然後執行三個操作:
- 列印目前行,然後讀入下一行(讓我們
# SPECIAL_JOB
列印)r
從您的文件中讀取作業d
然後刪除曾經跟隨的行# SPECIAL_JOB
- 舊作業。