日期格式的轉換 –> 使用 Regular Expression

寫 LOG 時,日期格式的轉換,其實還蠻傷腦筋的,到底是年月日,日月年,中間要用 –【ex:2019-11-29】 或 / 【ex:2019/11/29】 或直接連起來【ex:20191129】

先看一下 sample –>

[root@server0 ~]# more redata4
2009-07-05
2008-09-09
2007-12-31
2009-02-02
2010-08-08
2009-07-08

這個範例是使用年-月-日,使用 sed + Regular Expression,就可以自由轉換格式

[root@server0 ~]# sed -r -e 's/^([0-9]{4})-([0-9]{2})-([0-9]{2})/\3-\2-\1/g' redata4        
05-07-2009
09-09-2008
31-12-2007
02-02-2009
08-08-2010
08-07-2009

這樣子就將日期換成日-月-年

[root@server0 ~]# sed -r -e 's/^([0-9]{4})-([0-9]{2})-([0-9]{2})/\1\/\2\/\3/g' redata4
2009/07/05
2008/09/09
2007/12/31
2009/02/02
2010/08/08
2009/07/08

轉換成年/月/日

[root@server0 ~]# sed -r -e 's/^([0-9]{4})-([0-9]{2})-([0-9]{2})/\1\2\3/g' redata4
20090705
20080909
20071231
20090202
20100808
20090708

將 – 拿掉,轉換成年月日

如果原本的日期格式,是沒有 – ,直接連起來的也可以

先 Standard Output 轉向,自己產生範例

[root@server0 ~]# sed -r -e 's/^([0-9]{4})-([0-9]{2})-([0-9]{2})/\1\2\3/g' redata4 > reddata6  [root@server0 ~]#
[root@server0 ~]# cat reddata6
20090705
20080909
20071231
20090202
20100808
20090708
[root@server0 ~]# sed -r -e 's/^([0-9]{4})([0-9]{2})([0-9]{2})/\1-\2-\3/g' reddata6
2009-07-05
2008-09-09
2007-12-31
2009-02-02
2010-08-08
2009-07-08

在年月日之間,插入 –

[root@server0 ~]# sed -r -e 's/^([0-9]{4})([0-9]{2})([0-9]{2})/\1\/\2\/\3/g' reddata6
2009/07/05
2008/09/09
2007/12/31
2009/02/02
2010/08/08
2009/07/08

在年月日之間,插入 /

使用 Regular Expression + sed,基本上,任何格式應該都拿不倒才對!

本篇發表於 Bookmark, CentOS 6, CentOS 7, Linux, RHEL 6, RHEL 7, ubuntu。將永久鏈結加入書籤。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s