【发布时间】:2015-12-29 11:28:51
【问题描述】:
我正在尝试从命令行使用 Perl 和正则表达式从日志文件中提取信息:
cat file_1 | perl -ne 'print if s/(2015-09-..) .*for (.\d+,\d)/\1/'
2015-09-02 20:03:05,037 INFO [ajp-bio-10.247.96.38-27032-exec-92] (RegisterOnlineAction:474) - REGISTRATION for [735078385,1]: Perform Action.
2015-09-02 20:26:41,383 INFO [ajp-bio-10.247.96.39-27002-exec-66] (RegisterOnlineAction:474) - REGISTRATION for [724314312,1]: Perform Action.
2015-09-02 21:09:47,890 INFO [ajp-bio-10.247.96.38-27002-exec-65] (RegisterOnlineAction:474) - REGISTRATION for [328057138,1]: Perform Bill.
但我没有得到我需要的输出。
我需要的是:
2015-09-02 735078385,1
2015-09-02 724314312,1
2015-09-02 328057138,1
'print if s/text/text/' 进行搜索和替换,可能不是最好的方法。但是有什么方法可以每行选择多个部分并将它们输出。
【问题讨论】:
-
将您的正则表达式更新为
\[(.\d+,\d)\]以匹配方括号。 -
这给了我与初始命令类似的输出:cat file_1 | perl -ne 'print if s/(2015-09-..) .*for [(.\d+,\d)]/\1/' 2015-09-02: 执行操作。 2015-09-02:执行操作。 2015-09-02:执行法案。