我正在尝试从特定日期的日志文件中复制行。
以下是他们的样子。
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
有什么建议吗?
答案 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