2015-06-04 2 views
3

У меня есть многострочная строка вроде следующий:Найти номера после определенного текста в строке с RegEx

2012-15-08 07:04 Bla bla bla blup 
2012-15-08 07:05 *** Error importing row no. 5: The import of this line failed because bla bla 
2012-15-08 07:05 Another text that I don't want to search... 
2012-15-08 07:06 Another text that I don't want to search... 
2012-15-08 07:06 *** Error importing row no. 5: The import of this line failed because bla bla 
2012-15-08 07:07 Import has finished bla bla 

То, что я хочу, чтобы извлечь все номера строк, которые имеют ошибки с помощью RegularExpression (с PowerShell) , Поэтому мне нужно найти номер между «*** Ошибка импорта строки №» и следующий «:», поскольку это всегда даст мне номер строки.

Я рассмотрел различные вопросы RegEx, но, честно говоря, ответы на них похожи на китайцев.

Пробовал построен RegEx с помощью http://regexr.com/, но не увенчались успехом до сих пор, например, со следующей схемой:

"Error importing row no. "(.?)":" 

Любые намеки?

+0

@AvinashRaj спасибо, но это не работает – Patric

ответ

4

Попробуйте это выражение:

"Error importing row no\. (\d+):" 

DEMO

Здесь нужно понять кванторы и спасся последовательности:

  • . любой символ; поскольку вы хотите только цифры, используйте \d; если вы имели в виду характер периода, вы должны избегать его с обратной косой чертой (\.)
  • ? Нулевой или один символ; это не то, что вам нужно, поскольку здесь вы можете ввести ошибку в строке 10 и взять только «1»
  • + Один или несколько; этого будет достаточно для нас
  • * Любое количество символов; вы должны позаботиться об этом при использовании .*, так как он может потреблять весь ваш вход
+0

Спасибо, что делает трюк! – Patric

+0

Спасибо за дополнительную информацию, поможет мне лучше понять RegEx. – Patric

1

Pretty straight. Прямо сейчас ваше цитирование вызовет ошибку в регулярном выражении, которое вы написали. Попробуйте вместо этого:

$LogText = ""#Your logging stuff 
[regex]$Regex = "Error importing row no\. ([0-9]*):" 
$Matches = $Regex.Matches($LogText) 
$Matches | ForEach-Object { 
    $RowNum = $_.Groups[1].Value #(Waves hand) These are the rows you are looking for 
} 
+0

Спасибо также. Кроме того, работа и большое спасибо за пример PowerShell, помогли мне разобраться. – Patric

0

Там может быть несколько способами, некоторые простыми, показанных ниже, может помочь: -

Я взял свой журнал в файле с именем temp.txt.

cat temp.txt | grep " Error importing row no." | awk -F":" '{print $2}' | awk -F"." '{print $2}' 

OR 

cat temp.txt | grep " Error importing row no." | sed 's/\(.*\)no.\(.*\):\(.*\)/\2/' 

 Смежные вопросы

  • Нет связанных вопросов^_^