在sed/awk/grep中将日期从2012-01-31更改为31-01-2012



我正在尝试将数字格式从2012-01-31切换到31-01-2012。在Stack Overflow上查找了大量页面,但一无所获。有人能帮我完成这项任务吗?

到目前为止我已经尝试过了:

echo 2012-01-31 | sed 's/^([0-9]*)-([0-9]*)-([0-9]*)/3-2-1/'

您可以使用date首先读取并格式化输出:

date -d 2012-01-31 +%d-%m-%Y

您尝试做的事情的正确版本如下。

echo '2012-01-31' | sed -E 's/^([0-9]*)-([0-9]*)-([0-9]*)/3-2-1/'

或不带扩展正则表达式、

echo '2012-01-31' | sed 's/^([0-9]*)-([0-9]*)-([0-9]*)/3-2-1/'

若您知道输入是正确的,但只需要重新排序它们,下面会更简单。

echo '2012-01-31' | sed -E 's/^(....)-(..)-(..)/3-2-1/'

纯bash,

a='2012-01-31'
[[ "$a" =~ (....)-(..)-(..) ]] || exit                          # exit if regex match failed
echo "${BASH_REMATCH[3]}-${BASH_REMATCH[2]}-${BASH_REMATCH[1]}"

使用GNU awk:

awk -v FIELDWIDTHS='4 1 2 1 2' '{ print $5, $3, $1 }' OFS=-

带任何awk:

awk '{ print $3, $2, $1 }' FS=- OFS=-

相关内容

最新更新