首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >展望未来的政策或条件

展望未来的政策或条件
EN

Stack Overflow用户
提问于 2015-11-11 11:01:31
回答 1查看 664关注 0票数 1

我有数据日志文件,如下所示,我正在尝试使用grep提取部分行。

数据:

代码语言:javascript
复制
Wed Nov 11|09:14:00.750|I|39|Dispatched message : uID : A13549123c, MSG : Some message here. Can be any amount of chars and contain anything., MSGREFNUM : 12948230158AASJKDHACNBMAMNSBD, Sender : IamSender|com.uws.wamg2.MessDisp|dispatchMessage|123
Wed Nov 11|09:58:01.928|I|41|Dispatched message : uID : 09qwCA0erR, MSG : Some other message without REFNUMcrap.

从line1:中提取MSG

代码语言:javascript
复制
grep -o -P '(?<=MSG : ).*(?=, MSGREFNUM)' testfile

返回:

代码语言:javascript
复制
Some message here. Can be any amount of chars and contain anything.

第二行将永远不包含MSGREFNUM,只是一个“。还有一条新线路。

我在想,也许"^“可以用来匹配换行符,但是没有用。

也许与"MSG : blabla而不是MSGREFNUM“相匹配会更好?

我如何添加一个或标准*(例如。在grep中,这样grep就能同时捕捉到两者?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-11 11:05:07

你是认真的,

代码语言:javascript
复制
grep -oP '(?<=MSG : )(?:.*(?=, MSGREFNUM)|.*)' file

演示

解释:

  • (?<=MSG : )查找背后,它在MSG :旁边查找
  • 非捕获组的(?:开始。
  • 首先,应该执行.*(?=, MSGREFNUM)模式。因此,它匹配, MSGREFNUM之前存在的所有字符。现在,regex引擎应该会看到下一个模式。
  • | OR
  • .*到最后一个字符匹配所有字符。请注意,这只适用于其余的行(即不存在, MSGREFNUM子字符串的行)。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33649161

复制
相关文章

相似问题

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