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

标签 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 脚本中使用正则表达式?

最佳答案

使用 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/

相关文章:

shell - Golang 从 *os.file 进行复制,无需等待 EOF

php - 使用关联数组替换字符串中的几个单词,保持原始大小写不变

java - 使用java清除html代码和重音符号中的字符串

string - 用于选择具有最新日期且不带子字符串的文件名的 Bash 脚本

mysql - 如何在目录中找到最后一个mysql转储文件并将其导入

linux - 当我尝试只匹配脚本中的最后一次出现时,Sed 不遵守 $ 地址字符

linux - 如何在 Linux 上不打开浏览器从命令行执行 URL

ruby - 使用正则表达式将 ruby 字符串分块

java - 正则表达式匹配 JAVA 中的两个斜线

javascript - 正则表达式将行与转义的换行符匹配