将sed / awk / grep中的日期从2012-01-31更改为2012年1月31日

我正在尝试将2012年1月31日之间的数字格式交换为2012年1月31日。在Stack Overflow上查找了很多页面,却一无所获。有人可以帮我完成这项任务吗?

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

echo 2012-01-31 | sed 's/^([0-9]*)-([0-9]*)-([0-9]*)/\3-\2-\1/'
timberjack 回答:将sed / awk / grep中的日期从2012-01-31更改为2012年1月31日

您可以使用date先阅读然后格式化输出:

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

以下是您尝试执行的操作的正确版本。

let postman nobody

ask one-of turtles [
          set postman my-postman
          set shape "person"

      ; CHECK IF THERE IS ANY EMAIL FOR ME  - function from here
      if empty? mailbox [
        let this-mail self

      hatch-mail 1[
        hide-turtle
        set person postman
        set this-mail self
       ... ; omitted for brevity
   ]
]

或没有扩展的正则表达式,

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/'

纯bash,

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

使用GNU awk:

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

任何awk:

awk '{ print $3,$2,$1 }' FS=- OFS=-
本文链接:https://www.f2er.com/3078100.html

大家都在问