繁体   English   中英

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

[英]Extract month and day from linux “date” command

我想修改以下语句来提取月份,以及日期:

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空格。 只是想知道是否有办法在一个命令中完成所有操作。 谢谢。

date接受一个应该在这里使用的FORMAT arg。 sed没有必要:

date +%d.%m.

输出:

03.04.

欧洲时间格式。 如果你想打印月份的名字使用

date +'%d. %B'

输出:

03. April

将月份和日期读入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"

对于日期格式, %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

似乎有一种更简单的方法从[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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM