我有数据日志文件,如下所示,我正在尝试使用grep提取部分行。
数据:
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
grep -o -P '(?<=MSG : ).*(?=, MSGREFNUM)' testfile返回:
Some message here. Can be any amount of chars and contain anything.第二行将永远不包含MSGREFNUM,只是一个“。还有一条新线路。
我在想,也许"^“可以用来匹配换行符,但是没有用。
也许与"MSG : blabla而不是MSGREFNUM“相匹配会更好?
我如何添加一个或标准*(例如。在grep中,这样grep就能同时捕捉到两者?
发布于 2015-11-11 11:05:07
你是认真的,
grep -oP '(?<=MSG : )(?:.*(?=, MSGREFNUM)|.*)' file解释:
(?<=MSG : )查找背后,它在MSG :旁边查找(?:开始。.*(?=, MSGREFNUM)模式。因此,它匹配, MSGREFNUM之前存在的所有字符。现在,regex引擎应该会看到下一个模式。| OR.*到最后一个字符匹配所有字符。请注意,这只适用于其余的行(即不存在, MSGREFNUM子字符串的行)。https://stackoverflow.com/questions/33649161
复制相似问题