Find numbers after specific text in a string with RegEx

后端 未结 3 1252
佛祖请我去吃肉
佛祖请我去吃肉 2020-12-03 15:00

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 faile         


        
相关标签:
3条回答
  • 2020-12-03 15:20

    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/'
    
    0 讨论(0)
  • 2020-12-03 15:36

    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
    }
    
    0 讨论(0)
  • 2020-12-03 15:42

    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
    0 讨论(0)
提交回复
热议问题