首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Grep multiple and find multiple patterns

Grep multiple and find multiple patterns
EN

Stack Overflow用户
提问于 2020-09-23 21:34:25
回答 4查看 96关注 0票数 0

我有以下格式的日志,我试图从他们的多个字段grep。

代码语言:javascript
复制
2020-09-23 INFO  [http-nio-8080-exec-428] localhost.com CLIENT_ID=abc CLIENT_IP=1.2.3 CLASS_NAME=ABCIMPL METHOD_NAME=789{Roles} REQUEST=[<Request>
some text
</Request>
2020-09-23 INFO  [http-nio-8080-exec-428] localhost.com CLIENT_ID=mno CLIENT_IP=1.2.4 CLASS_NAME=MNOP METHOD_NAME=1234{Decisions} REQUEST=[<Request>
some text
</Request>

我想在一个文本文件中捕获以下格式的3个字段。

代码语言:javascript
复制
CLIENT_ID=abc , CLASS_NAME=ABCIMPL , METHOD_NAME=789{Roles}
CLIENT_ID=mno ,  CLASS_NAME=MNOP ,  METHOD_NAME=1234{Decisions}

我能够捕获一个字段,但不是所有字段。

问候

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-09-23 21:48:05

您可以尝试使用GNU awk编写和测试下面的示例吗?

代码语言:javascript
复制
awk '
BEGIN{
  OFS=" , "
}
match($0,/CLIENT_ID[^ ]*/){
  val=substr($0,RSTART,RLENGTH)
  match($0,/CLASS_NAME[^ ]*/)
  val1=substr($0,RSTART,RLENGTH)
  match($0,/METHOD_NAME[^ ]*/)
  print val,val1,substr($0,RSTART,RLENGTH)
  val=val1=""
}' Input_file
票数 3
EN

Stack Overflow用户

发布于 2020-09-23 23:04:26

您可以使用sed来捕获感兴趣的字段:

代码语言:javascript
复制
sed  -nE 's/.* (CLIENT_ID=[^[:space:]]*).* (CLASS_NAME=[^[:space:]]*).* (METHOD_NAME=[^[:space:]]*).*/\1, \2, \3/p' file
CLIENT_ID=abc, CLASS_NAME=ABCIMPL, METHOD_NAME=789{Roles}
CLIENT_ID=mno, CLASS_NAME=MNOP, METHOD_NAME=1234{Decisions}
票数 4
EN

Stack Overflow用户

发布于 2020-09-23 21:58:48

因为它是日志文件,所以您的字段位置是固定的。你可以使用这个简单的awk:

代码语言:javascript
复制
awk -v OFS=' , ' '$1 ~ /^[0-9]{4}(-[0-9]{2}){2}$/{ print $5, $6, $8}' file.log
代码语言:javascript
复制
CLIENT_ID=abc , CLIENT_IP=1.2.3 , METHOD_NAME=789{Roles}
CLIENT_ID=mno , CLIENT_IP=1.2.4 , METHOD_NAME=1234{Decisions}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64029207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档