wake-up-neo.net

Finden Sie mit RegEx nach einem bestimmten Text in einer Zeichenfolge

Ich habe eine mehrzeilige Zeichenfolge wie die folgende:

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

Was ich möchte, ist, alle Zeilennummern, die Fehler enthalten, mit Hilfe von RegularExpression (mit PowerShell) zu extrahieren. Ich muss also die Nummer zwischen "*** Fehler beim Importieren der Zeilennummer" und dem folgenden ":" finden, da mir dies immer die Zeilennummer gibt.

Ich habe mir verschiedene andere RegEx-Fragen angesehen, aber um ehrlich zu sein, sind die Antworten für mich wie Chinesisch.

Ich habe versucht, RegEx mit Hilfe von http://regexr.com/ zu bauen, war aber bisher nicht erfolgreich, beispielsweise mit dem folgenden Muster:

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

Irgendwelche Hinweise?

10
Patric

Versuchen Sie diesen Ausdruck:

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

DEMO

Hier müssen Sie die Quantifizierer und die verstrichenen Sequenzen verstehen:

  • . beliebiges Zeichen; Wenn Sie nur Zahlen wünschen, verwenden Sie \d; wenn Sie das Punktzeichen bedeuteten, müssen Sie es mit einem Backslash (\.)
  • ? Null oder ein Zeichen; das ist nicht was Sie wollen, da Sie hier einen Fehler in Zeile 10 haben können und nur die "1" nehmen würden
  • + Eins oder viele; das genügt uns
  • * Beliebige Zeichenanzahl; Sie müssen vorsichtig sein, wenn Sie dies mit .* verwenden, da dies Ihre gesamte Eingabe verbrauchen kann
11
Rubens Farias

Ziemlich einfach. Jetzt wird Ihr Zitat einen Fehler in der Regex verursachen, die Sie geschrieben haben. Versuchen Sie es stattdessen:

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

Es gibt mehrere Möglichkeiten, ein paar einfache Möglichkeiten könnten helfen: -

Ich habe Ihr Log in eine Datei namens temp.txt aufgenommen.

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
Lalit Somnathe