3

我用下一种格式在我的文件上写下日期

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
4

2 回答 2

5

尝试以下操作:

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

或者更简洁

grep -E '\w{3}-\w{3}-[0-9]{2}-[0-9]{4}' ~/file1
于 2013-10-17T09:54:26.203 回答
1

如果您想明确说明它并了解区域设置,您可以使用shdategrep这样做coreutils

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'|'))" 
于 2013-10-17T13:25:32.213 回答