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



现在只提取一天...

我目前正在搜索sed的工作原理。看起来像正在使用的各种正则表达式,但是...我想我可以肯定一下一下论坛。

谢谢。

编辑1

我现在有:

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

很棒...除了去除当天的前导零。然后我在月和日之间有两个空格
例如,2014年4月29日,我得到:
  Apr 29 2014

太好了但是对于2014年5月1日,我得到:
  May  1, 2014

在“五月”和“1”之间有一个双倍空格。我想我可以分两步来做...通过执行date命令,然后使用sed查找和替换 double 空格。
只是想知道是否有一种方法可以在一个命令中完成所有操作。
谢谢。

最佳答案

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

10-06 05:37