Shell程序从日志文件中提取数据

时间:2012-12-04 11:24:13

标签: regex shell

我将编写一个shell脚本来浏览我的应用程序生成的日志文件,我需要从生成的日志中仅分离出函数名称和有关调用的最小信息。

日志文件格式为 - 0.0003 636488 +440 -> include_once(/var/www/public/const.php) /var/www/public/ajax_shop.php:2

现在,出于这样的一行,我想提取一下 - “include_once”在文件“ajax_shop.php”的第2行调用

在这种情况下,我应该如何在shell脚本中使用正则表达式?

1 个答案:

答案 0 :(得分:3)

使用sed的一种方法:

sed 's/.*-> \([^(]*\).*:\(.*\)/\1 was called at line \2/' logfile
include_once was called at line 2.

\([^(] * \)=>匹配直至遇到右括号。[^(] * =>表示一系列不是'('。

的字符。

使用awk:

$ awk -F"[>(:]" '{print $2 " was called at line " $NF}' logfile
 include_once was called at line 2.

awk使用多个分隔符>,(和:。使用此功能,只需打印第二个字段和最后一个字段即可。