我将编写一个 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 脚本中使用正则表达式?
最佳答案
使用 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 使用多个分隔符 >,( 和 :。使用它,打印第二个字段和最后一个字段就变得简单了。
关于regex - 从日志文件中提取数据的 Shell 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13701793/