我有这样的文字:
aaaaaaaaaaaaaaaaaaaaddddd
sadasdafnsdfoisjhpfnsf
dasnfdfmsdf until: Thu Apr 29 19:41:02 EEST 2021 dasd
asdasmda[mfiun[hg[sm df,
dfmsdf[ismdfsdfsd,flsdfsdf******************
我必须从文本中解析一个日期,然后我必须将它与今天进行比较,如果它做得更好,否则我必须做其他事情,我必须用shell脚本写它但我现在不用非常好。有人能举例说明如何做到这一点。
提前致谢。
答案 0 :(得分:1)
我会分两步完成。 (它可以在一个完成):
1,获取日期字符串 2,做比较
e.g:
kent$ d=$(echo "aaaaaaaaaaaaaaaaaaaaddddd
sadasdafnsdfoisjhpfnsf
dasnfdfmsdf until: Thu Apr 29 19:41:02 EEST 2021 dasd
asdasmda[mfiun[hg[sm df,
dfmsdf[ismdfsdfsd,flsdfsdf******************"|grep -o '[A-Z].*[0-9]')
检查var d:
kent$ echo $d
Thu Apr 29 19:41:02 EEST 2021
现在我们将此日期与今天进行比较。我们需要将两个日期转换为秒来进行比较:
kent$ echo $(($(date -d"${d}" +%s)-$(date +%s)))
251171977
我打印出上述命令的结果。在您的情况下,您可以将其分配给var。或者直接检查结果。如果> 0表示将来文本中的日期。否则,它是过去的(或与今天相同)。
修改强>
一些数学:
使用int:
kent$ echo $((251171977/(3600*24)))
2907
精确:
kent$ echo "scale=2;251171977/(3600*24)"|bc
2907.08
更准确地说:
kent$ echo "scale=7;251171977/(3600*24)"|bc
2907.0830671
答案 1 :(得分:1)
如果可能,请以易于解析的形式打印日期。即。
`echo "the day of the year is `date '+%j'`"`
这使得比较更容易。