我想搜索带有时间戳线在日志文件中(不是所有的线路有时间戳),我也想保持这些时间戳,以我看到的时间跨度中,忙碌了一天号等grep的匹配行一个文件,匹配的字符串到另一个文件
201 3083560 2013-10-21T13:57:55.334+0200 time|bootup
202 3083560 2013-10-21T13:57:55.334+0200 startup
204 3083579 2013-10-21T13:57:55.353+0200 system|device
205 3083579 2013-10-21T13:57:55.353+0200 system|manufacturer
206 3083579 2013-10-21T13:57:55.353+0200 system|model
我可以运行命令:
grep -P '\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}[+-]\d{4}\t' usr.log > file1.txt
grep -Po '\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}[+-]\d{4}\t' usr.log > file2.txt
我的问题是,我可以运行的grep一次得到我需要一些管道?模式保持不变,所以我猜grep一次可以节省一些时间,因为我有30k个人用户日志文件。
*将标签保留在图案末端很有用,因为在某些行中最后一列有时间值,所以我需要排除\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}[+-]\d{4}\n
。
*我的环境是CentOS的7,grep的(GNU)2.20。
非常感谢!
您不必两次运行它,你可以在'usr.log'直接使用'grep的-oP'。 。 – Inian
另外您正则表达式'\ d {4} - \ d {2} - \ d {2}Ť\ d {2}:\ d {2} \ d {2} \ \ d {3} [+ - ] \ d {4} \ t'或\ d {4} - \ d {2} - \ d {2} T \ d {2}:\ d {2} \ d {2}。\ d {3} [+ - ] \ d {4} \ n'与示例输入文件中的行不匹配 – Inian
谢谢!我忘了额外的:在模式中。现在我已经修复了它。但是如何在一次运行中完成呢?我也想保留file1.txt。 – leoce