如何使用shell脚本从扩展名中提取日期

时间:2014-09-19 11:57:01

标签: shell

我尝试仅使用扩展名.log从前两行的文件名中提取日期 例如:文件名如下 my_logFile.txt包含

abc20140916_1.log
abhgg20140914_1.log
abf20140910_1.log
log.abc_abc20140909_1

我试过的代码:

awk '{print substr($1,length($1)-3,4)}' my_logFile.txt

但是将操作视为:

.log
.log
.log

需要op as:

20140916
20140914

*****修订后的查询* 我有一个包含n个日志文件的txt文件。 txt文件中的每一行都是这样的。

-rw-rw-rw- 1 abchost abchost 241315175 Apr 16 10:45 abc20140405_1.log
-rw-rw-rw- 1 abchost abchost 241315175 Apr 16 10:45 aghtff20140404_1.log
-rw-rw-rw- 1 abchost abchost 241315175 Apr 16 10:45 log.pqrs20140403_1

我需要从前两行中提取文件名中的日期。这里的文件名在日期之前具有不同数量的char。 操作应该是L

20140405
20140404 

2 个答案:

答案 0 :(得分:1)

这对你有用吗?

$ head -2 file | grep -Po ' [a-z]+\K[0-9]+(?=.*\.log$)'
20140405
20140404

解释

  • head -2 file获取文件的前两行。
  • grep -Po ' [a-z]+\K[0-9]+(?=.*\.log$)'获取(space + a-z letters)和(.log + end of line)块之间的数字位数。

答案 1 :(得分:0)

试试这个,

cut -f9 -d " " <file> | grep -o -E "[0-9]{8}"

在我的机器上工作,

[root@giam20 ~]# cat sample.txt
-rw-rw-rw- 1 abchost abchost 241315175 Apr 16 10:45 abc20140405_1.log
-rw-rw-rw- 1 abchost abchost 241315175 Apr 16 10:45 aghtff20140404_1.log
-rw-rw-rw- 1 abchost abchost 241315175 Apr 16 10:45 log.pqrs20140403_1
[root@giam20 ~]# cut -f9 -d " " sample.txt | grep -o -E "[0-9]{8}"
20140405
20140404
20140403