在Unix中获取grep -E的日期格式

时间:2013-10-17 08:57:47

标签: unix datetime grep

我用下一格式

在我的文件上写日期
date +%a-%b-%d-%Y

我的目标是获取文件中的日期列表。 我知道我需要用grep -E来做,但我不知道如何正确使用日期的格式。

期望的输入:

"grep -E (the format of the dates I'm looking for)" ~/file1

期望的输出:

Tue-Oct-15-2013
Wen-Oct-16-2013
Wen-Oct-16-2013
Thu-Oct-17-2013

2 个答案:

答案 0 :(得分:3)

请尝试以下操作:

grep -E '[[:alpha:]]{3}-[[:alpha:]]{3}-[[:digit:]]{2}-[[:digit:]]{4}' ~/file1

或更简洁

grep -E '\w{3}-\w{3}-[0-9]{2}-[0-9]{4}' ~/file1

答案 1 :(得分:1)

如果您希望明确它并且可以识别区域设置,则可以使用shdategrepcoreutils执行此操作:

days="($(  for i in $(seq  7); do date -d 2013/01/$i +%a; done | paste -sd'|'))" 
months="($(for i in $(seq 12); do date -d 2013/$i/01 +%b; done | paste -sd'|'))" 

您现在可以像这样grep日期格式:

grep -E "${days}-${months}-[0-9]{1,2}-[0-9]{4}" infile

请注意,您似乎使用的是非标准星期三缩写,如果这不是区域设置变体,则需要修改days行:

days="($(for i in $(seq  7); do date -d 2013/01/$i +%a; done | sed s/Wed/Wen/ | paste -sd'|'))"