我正在尝试将数字格式从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=-