从linux"date"命令中提取月和日

dot*_*dot 2 linux shell date

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

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

现在它只提取一天......

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

谢谢.

编辑1

我现在有:

  testdate=$(date -d "2 days" "+%b %_d %Y")
Run Code Online (Sandbox Code Playgroud)

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

  Apr 29 2014
Run Code Online (Sandbox Code Playgroud)

这很棒.但是对于2014年5月1日,我得到:

  May  1, 2014
Run Code Online (Sandbox Code Playgroud)

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

hek*_*mgl 6

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

date +%d.%m.
Run Code Online (Sandbox Code Playgroud)

输出:

03.04.
Run Code Online (Sandbox Code Playgroud)

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

date +'%d. %B'
Run Code Online (Sandbox Code Playgroud)

输出:

03. April
Run Code Online (Sandbox Code Playgroud)


gle*_*man 4

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

read month day < <(date -d "2 days" "+%m %d")
Run Code Online (Sandbox Code Playgroud)

如果您计划对这些值进行算术运算,请使用将被视为八进制但无效的八进制数的数字0809. 如果您想去掉前导零,请使用"+%_m %_d"


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

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

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

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