我想修改以下语句以提取月份和日期:
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空格。 只是想知道是否有办法在一个命令中完成所有操作。 谢谢。
答案 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")
如果您计划对这些值进行算术运算,则将其视为八进制数,但无效的八进制数08
和09
。如果要剥离前导零,请使用"+%_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
下面给出了以下内容,不使用sed
或read
删除任何类型的填充:
testdate=$(date -d "3 days" "+%b %-d %Y")
(days
已调整为显示从今天开始的单位数日期数字)
并输出以下内容:
$ echo $testdate
Sep 1 2014