如何在启用的 crontab 条目上方获取一行

如何在启用的 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

答案1

您可以使用awk来完成处理 的输出的所有工作crontab -l

这个想法是忽略空白行,捕获与注释行相关的文本,并在获得其他行时打印出捕获的文本。您提到您只需要第二个字段,因此我们只会保存它。

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

有多种写法,但我认为这已经是最清楚的了。有 3 种模式可以选择空白行、以 开头的行#和不以 开头的行。但请注意,这确实取决于您为活动的 crontab 中的每个条目添加注释

相关内容