【问题标题】:extract the keyword from the log file从日志文件中提取关键字
【发布时间】:2018-09-08 10:05:25
【问题描述】:

我需要根据我的 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

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

【问题讨论】:

    标签: bash awk sed grep sh


    【解决方案1】:

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

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

    解决方案二:

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

    【讨论】:

    • 上述查询获取所有与日志匹配的内容。我只需要查询 ex:"SELECT * FROM table limit 5"
    • @TejuPriya,第二个解决方案将只匹配 select 一个。您可以从中删除 1 ,它只会打印其中的 Select 内容。
    • @TejuPriya,现在删除了1,请检查一次,让我知道它是否对您有帮助?
    【解决方案2】:

    sed

    用字符串“SELECT”改变SELECT之前的所有字符串(包括SELECT)

      sed -n 's/.*SELECT/SELECT/p'  file
    

    grep

    你可以运行这个(显示找到的正则表达式):

     grep -oE 'SELECT .*' file
    

    【讨论】:

    • 上述查询还获取所有日志。我只需要这个“SELECT * FROM table limit 5”。任何帮助都会得到帮助
    • 很好用,但还有一个疑问。如何更改查询以支持大写或小写等大小写。
    • 我不确定你的意思,如果你想让 grep 也覆盖 "select * from table limit"(小写),那么你可以将 -i 标志添加到 grep。 grep -oEi 'SELECT .*' file
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多