Regex для извлечения содержимого из каждой строки файла журнала, выводимого от _m до конца строки

Формат строки журнала:

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

Я хочу извлечь из '_m' до конца строки, удаляя '_' перед 'm',

Новое в регулярных выражениях...

Спасибо!

3 ответа

Решение

Если ваш инструмент / языковая поддержка оглядываются назад, это работает: соответствует первому _m до EOL, также игнорировать ведущие _

(?<=_)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.

С sed:

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

Это довольно просто:

Этот пример написан на 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);

Надеюсь, это поможет вам в ваших поисках.

Другие вопросы по тегам