1

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

使用后的文件内容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

现在,假设我想提取 dateJul 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

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

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

4

2 回答 2

3

对于有序输入,

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

足够了。

于 2012-07-09T15:00:39.890 回答
1

你很接近,你想要的是这样的:

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

变化是:

  • added -n,这意味着不会打印行,除非您特别说 withp
  • 添加-e,只是为了清楚起见
  • 删除了字符串周围的双引号。这些不是必需的,因为表达式已经包含在单引号中,并且双引号不会出现在您的文件中。

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

于 2012-07-09T15:01:51.750 回答