Grep

如何在啟用的 crontab 條目上方獲得一行

  • August 28, 2022

我有以下 crontab 條目

$ crontab -l
#Cron to auto restart app1
#Ansible: test1
#*/15 * * * * ansible-playbook  /web/playbooks/automation/va_action.yml


#Cron to auto restart app7

#Ansible: test7
*/15 * * * * ansible-playbook  /web/playbooks/automation7/va_action.yml | tee -a /web/playbooks/automation7/cron.out


#Cron to restart Apache services on automation server

#Ansible: test3
0 2 * * * /web/apps/prod/apache/http-automation/bin/apachectl -k start

以下是啟用的 cron 條目:

crontab -l | grep  -v '#' | tr -d '\n'

*/15 * * * * ansible-playbook  /web/playbooks/automation7/va_action.yml | tee -a /web/playbooks/automation7/cron.out
0 2 * * * /web/apps/prod/apache/http-automation/bin/apachectl -k start

我知道grep -B1會在 grep 字元串上方給我一行。

如您所見,啟用的 cron 條目是

#Ansible: test1
#Ansible: test7

因此,我希望將 test1 和 test7 列為我想要的輸出| awk '{print $2}'

期望的輸出:

test1
test7

您可以使用awk來完成處理輸出的所有工作crontab -l

這個想法是忽略空白行,擷取與註釋行相關的文本,並在您獲得其他行時列印出擷取的文本。你提到你只想要第二個欄位,所以我們只會保存它。

crontab -l | awk '/^$/ { next ; }
                 /^#/ { text=$2 ; }
                 /^[^#]/ { print text; }'

有多種方法可以寫這個,但我認為這已經很清楚了。有 3 種模式可以選擇空白行、以開頭的#行和不以開頭的行。但是請注意,這確實取決於您為活動的 crontab 中的每個條目添加評論

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