使用命令date -d 和正则表达式 实现判断日期格式是否正确
实现代码如下:
a="20230201" #变量a要存储检查的日期
echo $a | grep -Eq "[0-9]{8}" && date -d $a +%Y%m%d >/dev/null 2>&1
if [ $? -ne 0 ]
then
#错误的日期格式
echo "error"
else
#正确的日期格式
echo $a
fi
代码详解
1,date
参数
| -d 显示字符串所指的日期与时间,通常用来查看过去或未来的某个时间 |
| -s 根据字符串来设置日期与时间 |
| --help 帮助 |
| --version 显示版本信息 |
命令:date
显示:2023年 1月 5日 木曜日 13:36:24 (注:每个电脑默认的格式可能会有不一样)
命令格式:date -d “+/- 时间” 显示的时间格式
命令: date -d "20220303" (注:没有加时间格式,显示时安按照默认格式)
显示:2022年 3月 3日 木曜日 00:00:00 (注:这里是日本系统,显示时跟中文系统不一样)
命令:date -d "20220303" +%Y%m%d (注:加时间格式,按照时间格式显示。时间格式区分大小写,写错会识别错误。)
显示:20220303
日期不满位少于8位的情况可能出现的影响:
例子:
命令:date -d "220101" +%Y%m%d (注:满位的日期20220101。)
显示:20220101
命令:date -d "200111" +%Y%m%d (注:满位的日期20010101。)
显示:20200111
总结:
上面2个例子可以看出,①时间格式的识别是从右到左;②月和日不是2位会造成日期读取错误;③年可以不是满位
参考链接里面有关于date的详细使用方法
参考:date命令的使用技巧_漠效的博客-CSDN博客_"`date -d \"${enddatecol} 1 days\" +\"%y%m%d\"`"
2,grep 行过滤工具
grep ( global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来 )是一种强大的文本搜索工具,它能使用正则表达式搜索文本,查找包含某些字符串的行或符合某个模式(Pattern)的一类字符串的行,并把匹配的行打印出来。grep家族包括grep、egrep和fgrep。Windows系统下类似命令FINDSTR
grep -F 的功能等同于 fgrep,但是出错和用法消息不同-s 标志功能也不同。
fgrep 命令搜索 File 参数指定的输入文件(缺省为标准输入)中的匹配模式的行。
grep -E 的功能等同于 egrep,但是出错和用法消息不同-s 标志功能也不同。
egrep命令是一个搜索文件获得模式,使用该命令可以任意搜索文件中的字符串和符号,也可以为你搜索一个多个文件的字符串,一个提示符可以是单个字符、一个字符串、一个字、一个句子。
语法:grep [-abcEFGhHilLnqrsvVwxy][-A][-B][-C] [-d][-e][-f][--help][--color] [范本模式] [文件或目录...]
grep -q 是不打印任何信息!通常可用于 if 判断条件来使用
若不指定任何文件名称,或是所给予的文件名为“-”,则grep指令会从标准输入设备读取数据。
这行代码的标准输入就是 $a |
参考有很详细的例子可以看
参考:shell --- grep 命令详解_51CTO博客_shell中grep命令详解
浙公网安备 33010602011771号