我有以下 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 中的每个条目添加注释