bash - 从日志文件中提取关键字

标签 bash awk sed grep sh

我需要根据 grep 命令过滤关键字。下面是我的日志文件。

2018-03-20T15:07:33,432 INFO  [26b604b7-43cf-4bdc-9ffb-6bae323f8fc5 HiveServer2-Handler-Pool: Thread-55([])]: ql.Driver (Driver.java:compile(429)) - Compiling command(queryId=hive_20180320150733_cb6c088a-2b53-4826-891a-2dd905b16cef): SELECT * FROM table limit 5

我需要像这样提取特定的查询。

SELECT * FROM table limit 5

我尝试过这样

grep -oE 'SELECT * FROM [a-zA-Z][a-zA-Z0-9_]*' hive-server2.log

也尝试过 awk

awk 'BEGIN{ print "" }
 /Executing command\(queryId/{ sub(/.*queryId=[^[:space:]]+: /,""); q=$0 }
 /s3:\/\//{ print "," q }' OFS=',' hive-server2.log

没有什么对我有用。任何帮助将不胜感激。

最佳答案

如果您的实际 Input_file 与所示示例相同,那么以下内容可能会对您有所帮助。

awk '{sub(/.*SELECT/,"SELECT")} 1'  Input_file

解决方案二:

awk 'match($0,/SELECT.*/){print substr($0,RSTART,RLENGTH);}'  Input_file

关于bash - 从日志文件中提取关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49556219/

相关文章:

bash - sed、awk、grep 匹配单词 2 个文件

bash - 如何在异常情况下对文件中的行进行编号(bash 或 sed)

shell - sed中p和P有什么区别?

linux - 让 bash 提示删除相关的点文件

linux - Bash if/else 错误

arrays - 如何在不使用全局变量的情况下在 bash 中返回数组?

linux - 在同一行的两个位置使用 sed 或 awk 从多行中删除模式

bash - 使用 bash 中变量的数据

linux - 如果输出为十进制,则为整数

linux - Bash 和 awk - 在进行多行模式数学运算时如何将变量传递给 awk?