在 unix shell 中,如何将昨天的日期放入变量中?
我有一个 shell 脚本,它执行以下操作以将当天的日期存储在变量“dt”中:
date "+%a %d/%m/%Y" | read dt
echo ${dt}
我如何将昨天日期放入变量中?
基本上我想要实现的是使用 grep 从日志文件中提取昨天的所有行,因为日志中的每一行都包含“Mon 01/02/2010”格式的日期。
多谢
I've got a shell script which does the following to store the current day's date in a variable 'dt':
date "+%a %d/%m/%Y" | read dt
echo ${dt}
How would i go about getting yesterdays date into a variable?
Basically what i'm trying to achieve is to use grep to pull all of yesterday's lines from a log file, since each line in the log contains the date in "Mon 01/02/2010" format.
Thanks a lot
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(17)
在 Linux 上,您可以使用
On Linux, you can use
您可以使用如下所示的 GNU date 命令
date --date='yesterday'
date --date='1 day ago'
date --date='10 day ago'
date -- date='10 周前'
date --date='10 个月前'
date --date='10 年前'
date --date='tomorrow'
date --date='1 day'
date --date ='10天'
日期 --date='10周'
日期 --date='10个月'
日期 --date='10年'
You can use GNU date command as shown below
date --date='yesterday'
date --date='1 day ago'
date --date='10 day ago'
date --date='10 week ago'
date --date='10 month ago'
date --date='10 year ago'
date --date='tomorrow'
date --date='1 day'
date --date='10 day'
date --date='10 week'
date --date='10 month'
date --date='10 year'
如果您有可用的 Perl(并且您的
date
没有像yesterday
这样的好功能),您可以使用:If you have Perl available (and your
date
doesn't have nice features likeyesterday
), you can use:如果您使用的是 Mac 或 BSD 或其他没有 --date 选项的设备,您可以使用:
更新:或者也许...
If you are on a Mac or BSD or something else without the --date option, you can use:
Update: or perhaps...
我在 Linux 中有 shell 脚本,以下代码对我有用:
I have shell script in Linux and following code worked for me:
尝试以下方法:
它适用于 Linux 和 OSX。
Try the following method:
It works on both Linux and OSX.
您至少有 2 个选择
使用 perl:
安装GNU date(如果我没记错的话,它在
sh_utils
包中)不确定这是否有效,但您也许可以使用负时区。如果您使用的时区比当前时区早 24 小时,则只需使用
date
。You have atleast 2 options
Use perl:
Install GNU date (it's in the
sh_utils
package if I remember correctly)Not sure if this works, but you might be able to use a negative timezone. If you use a timezone that's 24 hours before your current timezone than you can simply use
date
.下面是一个 ksh 脚本,用于计算第一个参数的前一个日期,并在 Solaris 10 上进行了测试。
测试
Here is a ksh script to calculate the previous date of the first argument, tested on Solaris 10.
Tests
感谢大家的帮助,但由于我使用的是 HP-UX(毕竟:你付出的越多,你获得的功能就越少......)我不得不求助于 perl:
Thanks for the help everyone, but since i'm on HP-UX (after all: the more you pay, the less features you get...) i've had to resort to perl:
如果您的 HP-UX 安装安装了 Tcl,您可能会发现它的日期算术非常可读(不幸的是 Tcl shell 没有像 perl 那样很好的“-e”选项):
这将处理所有夏令时麻烦。
If your HP-UX installation has Tcl installed, you might find it's date arithmetic very readable (unfortunately the Tcl shell does not have a nice "-e" option like perl):
This will handle all the daylight savings bother.
如果您没有支持 --yesterday 的 date 版本,并且您不想使用 perl,则可以使用我的这个方便的 ksh 脚本。默认情况下,它返回昨天的日期,但您可以向它提供一个数字,它会告诉您过去很多天的日期。如果你看向遥远的过去,它就会开始放慢一点。 100,000 天前是 1738 年 1 月 30 日,尽管我的系统花了 28 秒才算出来。
If you don't have a version of date that supports --yesterday and you don't want to use perl, you can use this handy ksh script of mine. By default, it returns yesterday's date, but you can feed it a number and it tells you the date that many days in the past. It starts to slow down a bit if you're looking far in the past. 100,000 days ago it was 1/30/1738, though my system took 28 seconds to figure that out.
ksh93:
或:
第一个在同一进程中运行,第二个在子 shell 中运行。
ksh93:
or:
The first one runs in the same process, the second one in a subshell.
对于 Hp-UX,仅以下命令对我有用:
TZ=aaa24 date +%Y%m%d
您可以将其用作:
ydate=`TZ=aaa24 date +%Y%m%d`
echo $ydate
For Hp-UX only below command worked for me:
TZ=aaa24 date +%Y%m%d
you can use it as :
ydate=`TZ=aaa24 date +%Y%m%d`
echo $ydate
如果您有权访问
python
,这是一个帮助程序,它将获取任意n
天前的yyyy-mm-dd
日期值:If you have access to
python
, this is a helper that will get theyyyy-mm-dd
date value for any arbitraryn
days ago:昨天会让您在 AIX 中并将 TZ 变量设置回原始值
Will get you yesterday in AIX and set back the TZ variable back to original
尽管所有答案都很好,但不幸的是它们都不适合我。所以我不得不写一些老派的东西。 (我使用的是最低限度的 Linux 操作系统)
您可以将其与日期的常用格式结合起来。例如。
解释 :
以 epoc 秒( -d 选项)为单位输入日期,从中减去一天的等效秒数。这将给出精确的一天前的日期。
Though all good answers, unfortunately none of them worked for me. So I had to write something old school. ( I was on a bare minimal Linux OS )
You can combine this with date's usual formatting. Eg.
Explanation :
Take date input in terms of epoc seconds ( the -d option ), from which you would have subtracted one day equivalent seconds. This will give the date precisely one day back.