使用命令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命令详解

 

posted on 2023-01-11 11:15  爱吃玉米的tutu  阅读(1598)  评论(0)    收藏  举报