25

I have a multiline string like the following:

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

What I want is to extract all row numbers that have errors with the help of RegularExpression (with PowerShell). So I need to find the number between "*** Error importing row no. " and the following ":" as this will always give me the row number.

I looked at various other RegEx question but to be honest the answers are like chinese to me.

Tried to built RegEx with help of http://regexr.com/ but haven't been successful so far, for example with the following pattern:

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

Any hints?

0

3 Answers 3

35

Try this expression:

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

DEMO

Here you need to understand the quantifiers and escaped sequences:

  • . any character; as you want only numbers, use \d; if you meant the period character you must escape it with a backslash (\.)
  • ? Zero or one character; this isn't what do you want, as you can here an error on line 10 and would take only the "1"
  • + One or many; this will suffice for us
  • * Any character count; you must take care when using this with .* as it can consume your entire input
Sign up to request clarification or add additional context in comments.

1 Comment

Thanks for the additional information, helps me to understand RegEx better.
3

Pretty straight forward. Right now your quoting is going to cause an error in the regex you wrote up. Try this instead:

$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
}

1 Comment

Thank you also. Also working and many thanks for the PowerShell example, helped me clear things up.
0

THere could be multiple ways , few simple ones shown below might help:-

I took your log in a file called 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/'

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.