-1

我有这段文字:

aaaaaaaaaaaaaaaaaaaaddddd
sadasdafnsdfoisjhpfnsf
dasnfdfmsdf until: Thu Apr 29 19:41:02 EEST 2021 dasd
asdasmda[mfiun[hg[sm df,
dfmsdf[ismdfsdfsd,flsdfsdf******************

我必须从文本中解析日期,然后我必须将它与今天进行比较,如果做某事更好,否则我必须做其他事情,我必须用 shell 脚本编写它,但我现在做得不是很好. 有人可以给我一个例子如何做到这一点。

提前致谢。

4

2 回答 2

1

我会分两步做。(可以一次性完成):

1、获取日期字符串 2、做比较

例如:

 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
于 2013-05-14T14:45:26.953 回答
1

如果可能,以更易于解析的形式打印日期。IE

`echo "the day of the year is `date '+%j'`"`

这使得比较容易得多。

于 2013-05-14T15:06:35.543 回答