正则表达式从日志文件的每一行提取内容从'_m'到行尾

时间:2013-04-05 16:46:39

标签: regex logfiles

日志行格式:

Xxx x xx:xx:xx xmmxxx XXXXXX: XXXXXXX:XXX: xxx_Mxxx_Xxxxxx_mxxxxxmmxx [XXX xxxx.

我想从'_m'中提取到该行的末尾,删除'_'之前的'm'

正则表达式的新手......

谢谢!

3 个答案:

答案 0 :(得分:1)

如果您的工具/语言支持后视,则可行:匹配第一个_mEOL。也忽略了前导_

(?<=_)m.*

用grep测试:

kent$  echo "Xxx x xx:xx:xx xmmxxx XXXXXX: XXXXXXX:XXX: xxx_Mxxx_Xxxxxx_mxxxxxmmxx [XXX xxxx."|grep -Po '(?<=_)m.*' 
mxxxxxmmxx [XXX xxxx.

答案 1 :(得分:1)

使用sed

sed -n 's/^.*_\(m.*$\)/\1/p' file

答案 2 :(得分:0)

这很容易:

这个例子是用C#编写的,但正则表达式非常通用,可能适用于任何地方:

Regex regex = new Regex(@"_(m.*)");  // If you look for _M the regex should be @"_(M.*)"

Match match = regex.Match(logLine);
if (match.Success)
    Console.WriteLine(match.Groups[1].Value);

希望这能帮助你完成任务。