Skip to content

Go的template模板关于range换行和crontab的简单正则表达式

template range

go
{
  {{ range $_, $cron := .CronList }}
  {{- $cron }}
  {{ end }}
} >> /scripts/docker/merged_list_file.sh

效果如下图:

img

出现了一行空白,接着修改如下:

go
{
  {{ range $_, $cron := .CronList }}
  {{- $cron }}
  {{ end -}}
} >> /scripts/docker/merged_list_file.sh

img

正确修改方式如下,这个坑还是不少人会踩到:

go
{
  {{- range $_, $cron := .CronList}}
  {{ $cron -}}
  {{- end }}
} >> /scripts/docker/merged_list_file.sh

img

crontab regex

周末写工具自动拉取几个作者的脚本遇到需要提取脚本中的crontab表达式,研究了一下正则,因为我发现不同作者写脚本方式不一样,所以最稳的还是正则来匹配,之所以称为简单匹配,是因为没有做成真正的crontab是否有效的匹配,只是匹配格式,代码如下:

go
\*                                       // 匹配*
\?                                       // 匹配?
[0-9]{1,2}                               // 匹配单个时间
[0-9]{1,2}\-[0-9]{1,2}                   // 匹配时间段
[0-9]{1,2}\-[0-9]{1,2}\/[0-9]{1,2}       // 匹配每隔多久的时间段
([0-9]{1,2}\,?)*                         // 匹配,号隔开的多个时间
([0-9]{1,2}\,?)*\-[0-9]{1,2}             // 匹配,号和-号组成的时间段
([0-9]{1,2}\,?)*\-[0-9]{1,2}\/[0-9]{1,2} // 匹配,号、-号和/号组成的间隔多个时间段

组合在一起装成出现5次,代码如下

go
(((\*|\?|[0-9]{1,2}|[0-9]{1,2}\-[0-9]{1,2}|[0-9]{1,2}\-[0-9]{1,2}\/[0-9]{1,2}|([0-9]{1,2}\,?)*|([0-9]{1,2}\,?)*\-[0-9]{1,2}|([0-9]{1,2}\,?)*\-[0-9]{1,2}\/[0-9]{1,2})+[\s]){5})

效果如下,如果有人看到了这篇文章,恰好这个正则不能匹配你的crontab,麻烦留一下正则作为我的补充。

img

2021-06-05更新最新的crontab表达式

go
[^\s\:]((\*|[0-9]{1,2}|[0-9]{1,2}\-[0-9]{1,2}|[0-9]{1,2}\-[0-9]{1,2}\/[0-9]{1,2}|([0-9]{1,2}\,?)*|([0-9]{1,2}\,?)*\-[0-9]{1,2}|([0-9]{1,2}\,?)*\-[0-9]{1,2}\/[0-9]{1,2})+[ ]){4}(\*|[0-9]{1,2}|[0-9]{1,2}\-[0-9]{1,2}|[0-9]{1,2}\-[0-9]{1,2}\/[0-9]{1,2}|([0-9]{1,2}\,?)*|([0-9]{1,2}\,?)*\-[0-9]{1,2}|([0-9]{1,2}\,?)*\-[0-9]{1,2}\/[0-9]{1,2})

2022-12-25更新最新的crontab表达式(支持6位)

go
(((\*(/\d+)?|((\d+(-\d+)?)(,\d+(-\d+)?)*))(/\d+)?)\s+(\*(/\d+)?|((\d+(-\d+)?)(,\d+(-\d+)?)*))(/\d+)?\s+(\*(/\d+)?|((\d+(-\d+)?)(,\d+(-\d+)?)*))(/\d+)?\s+(\*(/\d+)?|((\d+(-\d+)?)(,\d+(-\d+)?)*))(/\d+)?\s+(\*(/\d+)?|((\d+(-\d+)?)(,\d+(-\d+)?)*))(/\d+)?\s+(\*(/\d+)?|((\d+(-\d+)?)(,\d+(-\d+)?)*))(/\d+)?)