带有通配符的多个字符串的GREP

时间:2014-05-01 17:01:30

标签: grep

我正在尝试从特定日期的日志文件中复制行。

以下是他们的样子。

2014-05-01T15:53:16+00:00 DEBUG (7): 

2014-04-301T11:08:10+00:00 DEBUG (7):

此GREP命令有效,但仅适用于完全字符串:

  

grep -w '2014-04-30\|2014-04-29\|2014-04-28\|2014-04-27\|2014-04-26\|2014-04-25\|2014-04-24\|2014-04-23\|2014-04-22\|2014-04-21\|2014-04-202014-04-19' /test_custom.log > new_file.log

当我尝试添加通配符时,它没有。我也尝试了其他几种相同的结果。

  

grep -w '2014-04-30*\|2014-04-29*\|2014-04-28*\|2014-04-27*\|2014-04-26*\|2014-04-25*\|2014-04-24*\|2014-04-23*\|2014-04-22*\|2014-04-21*\|2014-04-20*' /test_custom.log > new_file.log

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

星号*不是grep正则表达式中的通配符。它不会扩展到与最后一个角色不同的事物列表。 *代表Kleene closure,用于接受/匹配前一个字符/字符类的0次或更多次出现。

在您的情况下,您应添加.,代表接受/匹配任何字符。最终表达式应如下所示:

grep -w '2014-04-30.*\|2014-04-29.*\|2014-04-28.*\|2014-04-27.*\|
    2014-04-26.*\|2014-04-25.*\|2014-04-24.*\|2014-04-23.*\|2014-04-22.*\|
    2014-04-21.*\|2014-04-20.*' /test_custom.log > new_file.log

虽然返回你想要的结果,但写起来却很烦人。因此,您应该利用grep的正则表达式功能,并尝试更简洁一些,如:

grep -w '2014-04-30.*\|2014-04-2[0-9]-.*' /test_custom.log > new_file.log
相关问题