如何按日期范围提取文字?

时间:2012-07-09 14:56:31

标签: bash sed awk

我正在尝试根据给定的日期范围从文件中提取文本。日期范围将由用户决定,但在这里我只使用固定范围。

使用grep后的文件内容如下:

ronnie@ronnie:~$ zgrep added new.txt
Jul 02 21:03 : update: added Linkin Park/Living Things(2012)/02 - Linkin Park - In My Remains.mp3
Jul 02 21:03 : update: added Linkin Park/Living Things(2012)/03 - Linkin Park - Burn It Down.mp3
Jul 07 10:33 : update: added Linkin Park/Living Things(2012)/04 - Linkin Park - Lies Greed Misery.mp3    
Jul 09 07:54 : update: added Linkin Park/Living Things(2012)/04 - Linkin Park - Lies Greed Misery.mp3

现在,假设我想在日期Jul 07Jul 09之间提取文字。所以我使用了以下命令

zgrep added new.txt | sed '/"Jul 09"/,/"Jul 07"/p'

给了我以下输出

Jul 02 21:03 : update: added Linkin Park/Living Things(2012)/02 - Linkin Park - In My Remains.mp3
Jul 02 21:03 : update: added Linkin Park/Living Things(2012)/03 - Linkin Park - Burn It Down.mp3
Jul 07 10:33 : update: added Linkin Park/Living Things(2012)/04 - Linkin Park - Lies Greed Misery.mp3
Jul 09 07:54 : update: added Linkin Park/Living Things(2012)/04 - Linkin Park - Lies Greed Misery.mp3

所以,正如你所看到的那样,它没有考虑我给sed的range

我的问题是根据日期范围提取文本的正确方法是什么。

2 个答案:

答案 0 :(得分:3)

对于有序输入,

command | sed -n '/^Jul 07/,/^Jul 09/p' inputFile

就足够了。

答案 1 :(得分:1)

你非常接近,你想要的是这个:

zgrep added new.txt | sed -n -e '/Jul 09/,/Jul 07/p'

变化是:

  • 添加了-n,这意味着除非您明确说明p
  • ,否则不会打印行 为了清晰起见,
  • 添加了-e
  • 删除了字符串周围的双引号。这些不是必需的,因为表达式已经用单引号括起来,双引号没有出现在你的文件中。

请注意,此版本和您的版本仅在行始终按日期/时间排序时才有效。