从linux“date”命令中提取月和日

时间:2014-04-03 15:51:53

标签: linux shell date

我想修改以下语句以提取月份和日期:

  

testdate = $(日期-d“2天”+%d | sed's / 0([1-9])/ \ 1 /')

现在只提取一天...

我目前正在谷歌上搜索sed是如何运作的。看起来像是正在使用的各种各样的正则表达式但是......我想我会在论坛上查看一下。

感谢。

编辑1

现在我有:

  testdate=$(date -d "2 days" "+%b %_d %Y")

哪个很好......除非当天的前导零被剥离。然后我在月和日之间有两个空格 例如,2014年4月29日,我得到:

  Apr 29 2014

这很棒。但是2014年5月1日我得到了:

  May  1, 2014

“May”和“1”之间有一个双重空格。我想我可以分两步完成...通过执行date命令,然后sed查找并替换double空格。 只是想知道是否有办法在一个命令中完成所有操作。 谢谢。

4 个答案:

答案 0 :(得分:6)

date接受应在此处使用的FORMAT arg。 sed没有必要:

date +%d.%m.

输出:

03.04.

采用欧洲时间格式。如果您希望打印月份名称,请使用

date +'%d. %B'

输出:

03. April

答案 1 :(得分:3)

将月份和日期读入shell变量(假设为bash / ksh / zsh)

read month day < <(date -d "2 days" "+%m %d")

如果您计划对这些值进行算术运算,则将其视为八进制数,但无效的八进制数0809。如果要剥离前导零,请使用"+%_m %_d"


使用read,shell会为您处理多余的空格:

read mon day year < <(date -d "2 days" "+%b %_d %Y")
testdate="$mon $day $year"

如果您不想使用临时变量:

testdate="Apr  5 2014"       # $(date -d "2 days" "+%b %_d %Y")
testdate=${testdate//  / }   # globally replace 2 spaces with 1 space
echo "$testdate"

答案 2 :(得分:2)

对于日期格式%d,仅打印当天。除非您以格式指定,否则不可能提取月份。

指定获取月份的格式。

   %b     locale's abbreviated month name (e.g., Jan)
   %B     locale's full month name (e.g., January)
   %m     month (01..12)

例如:

$ date -d "2 days" +%d/%b
05/Apr
$ date -d "2 days" +%d/%B
05/April
$ date -d "2 days" +%d/%m
05/04

答案 3 :(得分:1)

似乎有一种更简单的方法可以从[linux]“date”命令中提取[月]和日,然后是所有以前的答案。

来自$ date --help

  By default, date pads numeric fields with zeroes.
  The following optional flags may follow `%':

  -  (hyphen) do not pad the field

下面给出了以下内容,不使用sedread删除任何类型的填充:

testdate=$(date -d "3 days" "+%b %-d %Y")days已调整为显示从今天开始的单位数日期数字)

并输出以下内容:

$ echo $testdate
Sep 1 2014