我有一个如下所示的多行字符串:
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问题,但说实话,答案对我来说就像中文一样。
尝试在http://regexr.com/的帮助下建立了RegEx,但到目前为止还没有成功,例如使用以下模式:
"Error importing row no. "(.?)":"
任何提示?
答案 0 :(得分:11)
试试这个表达式:
"Error importing row no\. (\d+):"
在这里,您需要了解量词和转义序列:
.
任何角色;如您只想要数字,请使用\d
;如果你的意思是句号,你必须用反斜杠(\.
)?
零个或一个字符;这不是你想要的,因为你可以在这里找到第10行的错误,只需要“1”+
一个或多个;这对我们来说已足够了*
任何字符数;使用.*
时必须小心,因为它可以消耗您的整个输入答案 1 :(得分:1)
非常直接。现在你的引用会导致你写的正则表达式出错。试试这个:
$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
}
答案 2 :(得分: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/'