ls -ltr
-rw-rw-r-- 1 soper sbcprd 36646 Jul 29 21:07 END_TIME_20150729_203759.log
-rw-rw-r-- 1 soper sbcprd 36647 Jul 30 20:37 END_TIME_20150730_201717.log
-rw-rw-r-- 1 soper sbcprd 36643 Jul 31 21:00 END_TIME_20150731_202028.log
-rw-rw-r-- 1 soper sbcprd 36597 Aug 1 16:32 END_TIME_20150801_162901.log
-rw-rw-r-- 1 soper sbcprd 36658 Aug 3 20:53 END_TIME_20150803_202725.log
-rw-rw-r-- 1 soper sbcprd 36645 Aug 4 20:51 END_TIME_20150804_202831.log
-rw-rw-r-- 1 soper sbcprd 36798 Aug 5 20:37 END_TIME_20150805_202013.log
最后一列显示结束时间为YYYYMMDD_HHMMSS
。
如何将这些数字打印为HH MM SS MM DD YYYY
?
答案 0 :(得分:3)
OP似乎要求重新格式化文件名中指定的时间。由于这些时间与文件的时间戳不同,我们无法通过操纵ls
选项获得我们想要的数字。
使用sed:
$ ls -ltr | sed -r 's/.*([[:digit:]]{4})([[:digit:]]{2})([[:digit:]]{2})_([[:digit:]]{2})([[:digit:]]{2})([[:digit:]]{2}).log$/\4 \5 \6 \2 \3 \1/'
20 37 59 07 29 2015
20 17 17 07 30 2015
20 20 28 07 31 2015
16 29 01 08 01 2015
20 27 25 08 03 2015
20 28 31 08 04 2015
20 20 13 08 05 2015
或者,如果我们想保留文件的名称,只需重新格式化名称中的数字:
$ ls -ltr | sed -r 's/([[:digit:]]{4})([[:digit:]]{2})([[:digit:]]{2})_([[:digit:]]{2})([[:digit:]]{2})([[:digit:]]{2})/\4 \5 \6 \2 \3 \1/'
-rw-rw-r-- 1 soper sbcprd 36646 Jul 29 21:07 END_TIME_20 37 59 07 29 2015.log
-rw-rw-r-- 1 soper sbcprd 36647 Jul 30 20:37 END_TIME_20 17 17 07 30 2015.log
-rw-rw-r-- 1 soper sbcprd 36643 Jul 31 21:00 END_TIME_20 20 28 07 31 2015.log
-rw-rw-r-- 1 soper sbcprd 36597 Aug 1 16:32 END_TIME_16 29 01 08 01 2015.log
-rw-rw-r-- 1 soper sbcprd 36658 Aug 3 20:53 END_TIME_20 27 25 08 03 2015.log
-rw-rw-r-- 1 soper sbcprd 36645 Aug 4 20:51 END_TIME_20 28 31 08 04 2015.log
-rw-rw-r-- 1 soper sbcprd 36798 Aug 5 20:37 END_TIME_20 20 13 08 05 2015.log
我们使用单个sed命令 substitution 。替换命令看起来像s/old/new/
,其中old
是正则表达式,new
可以引用我们在old
中匹配的组。
让我们看一下old
:
.*
匹配任何内容,在这种情况下以行首开头。
([[:digit:]]{4})
匹配四位数字并将其保存在第1组中,表示为\1
。今年是
([[:digit:]]{2})
匹配两位数字并将其保存在第2组中,表示为\2
。这是月份
([[:digit:]]{2})
匹配两位数字并将其保存在第3组中,表示为\3
。这是一天。
_
与下划线字符匹配。
([[:digit:]]{2})
匹配两位数字并将其保存在第4组中,表示为\4
。这是小时
([[:digit:]]{2})
匹配两位数字并将其保存在第5组中,表示为\5
。这是分钟。
([[:digit:]]{2})
匹配两位数字并将其保存在第6组中,表示为\6
。这是秒。
.log$
与文件名末尾的.log
相匹配。
上面匹配的所有内容都会替换为new
中的内容,在我们的例子中,\4 \5 \6 \2 \3 \1
包含:
#head_div {
background-color: maroon;
height: 90px;
z-index: 1;
margin-bottom: 10px;
position:fixed;
width:100%;
}
这些是我们上面匹配但重新排序的六个组。
答案 1 :(得分:1)
通过以下awk
程序管道:
awk '{print substr($9,19,2) " " substr($9,21,2) " " substr($9,23,2) " " substr($9,14,2) " " substr($9,16,2) " " substr($9,10,4)}'
应该给出:
20 37 59 07 29 2015
20 17 17 07 30 2015
20 20 28 07 31 2015
16 29 01 08 01 2015
20 27 25 08 03 2015
20 28 31 08 04 2015
20 20 13 08 05 2015