Grep
如何在啟用的 crontab 條目上方獲得一行
我有以下 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 中的每個條目添加評論