在unix shell中,如何将昨天的日期变为变量?

Chr*_*ris 37 unix shell datetime ksh hp-ux

我有一个shell脚本,它执行以下操作以将当前日期存储在变量'dt'中:

date "+%a %d/%m/%Y" | read dt
echo ${dt}
Run Code Online (Sandbox Code Playgroud)

我如何将昨天的日期变成变量?

基本上我想要实现的是使用grep从日志文件中提取所有昨天的行,因为日志中的每一行都包含"Mon 01/02/2010"格式的日期.

非常感谢

pol*_*mon 66

dt=$(date --date yesterday "+%a %d/%m/%Y")
echo $dt
Run Code Online (Sandbox Code Playgroud)


z1x*_*1x2 48

在Linux上,您可以使用

date -d "-1 days" +"%a %d/%m/%Y"
Run Code Online (Sandbox Code Playgroud)

  • 这是所有其他人中最好的答案,简短,甜美,简单,方便,酷,它证明了这个故事"给一个人喂一条鱼他一天都吃了,但教他钓鱼,他终身受益" (3认同)

pax*_*blo 12

如果您有可用的Perl(并且您date没有很好的功能yesterday),您可以使用:

pax> date
Thu Aug 18 19:29:49 XYZ 2010

pax> dt=$(perl -e 'use POSIX;print strftime "%d/%m/%Y%",localtime time-86400;')

pax> echo $dt
17/08/2010
Run Code Online (Sandbox Code Playgroud)


ram*_*har 12

您可以使用GNU date命令,如下所示

在过去得到日期

要获得昨天和过去的早些时候使用字符串前一天:

date --date ='昨天'

date --date ='1天前'

date --date = '10天前'

date --date = '10周前'

date --date ='10月前'

date --date ='10年前'

在未来获得日期

明天和后天(明天+ N)使用日期字来获取日期,如下:

date --date ='明天'

date --date ='1天'

date --date = '10 day'

date --date = '10周'

date --date = '10 month'

date --date = '10 year'


Dig*_*oss 9

如果您使用的是Mac或BSD或没有--date选项的其他内容,您可以使用:

date -r `expr \`date +%s\` - 86400` '+%a %d/%m/%Y'
Run Code Online (Sandbox Code Playgroud)

更新:或者......

date -r $((`date +%s` - 86400)) '+%a %d/%m/%Y'
Run Code Online (Sandbox Code Playgroud)

  • 使用`$()`而不是`\``这样就不那么尴尬了.ksh有`$()`? (2认同)
  • +1 只是因为没有假设每个 UNIX 问题都在 Linux 上。我们中的一些人还必须与其他风格一起工作。 (2认同)

juj*_*Bee 6

我在Linux中有shell脚本,以下代码为我工作:

#!/bin/bash
yesterday=`TZ=EST+24 date +%Y%m%d` # Yesterday is a variable
mkdir $yesterday # creates a directory with  YYYYMMDD format
Run Code Online (Sandbox Code Playgroud)

  • 对于任何正在寻找此类答案的人来说,这是迄今为止适用于 AIX 的最简洁的版本。AIX 不允许使用 -r 或 -d 标志,但实际上允许像这样操作时区!你让我开心了我一直在努力解决这个问题大约两个小时,我让约会看起来像半年前一样,而其他想法没有奏效。 (2认同)

ken*_*orb 5

尝试以下方法:

dt=`case "$OSTYPE" in darwin*) date -v-1d "+%s"; ;; *) date -d "1 days ago" "+%s"; esac`
echo $dt
Run Code Online (Sandbox Code Playgroud)

它可以在 Linux 和 OSX 上运行。