Kleine Sektflaschen Hochzeit
Mustervergleich mit dem Operator -match PowerShell bietet eine Reihe von Vergleichsoperatoren, die sich nicht nur auf numerische Werte anwenden lassen, sondern auch auf String-Objekte. Einer davon ist -match, dessen Besonderheit darin besteht, dass er als Vergleichsausdruck nicht nur wörtlich zu nehmende Zeichenketten akzeptiert, sondern auch RegEx: "Reguläre Ausdrücke in PowerShell 3. 0" -match "shell\s*(\d)" Dieser Ausdruck ergibt den Wert TRUE. Das ist insofern überraschend, als bei RegEx normalerweise zwischen Groß- und Kleinschreibung unterschieden wird. Rheinwerk Computing :: Linux - 8 Reguläre Ausdrücke. Im obigen Beispiel enthält die Zeichenkette, auf die das Muster passen soll, "PowerShell" mit einem großen 'S', während es im regulären Ausdruck klein geschrieben ist. Wenn der Mustervergleich case sensitive sein soll, dann kann man den Operator -cmatch verwenden. Zusätzlich gibt es noch -imatch, das genauso funktioniert wie -match, aber aus dessen Name explizit hervorgeht, dass es nicht zwischen Groß- und Kleinschreibung unterscheidet (und damit hilft, unerwartete Nebeneffekte zu vermeiden).
Also Danke für die Hilfe! bu 31. März 2014 09:05 Mir geht es darum, zu verstehen, wie die Logik von regulären Ausdrücken ist. Wenn ich doch klar anweise, dass ich einen String suche, der mindestens 3 uns höchstens 3 Zahlen lang sein soll {3, 3}, wieso dann eine Zahl wie 1988 gefunden wird. Nun ja, es gibt halt in "1988" eine Zahl mit drei Ziffern. So einfach ist das. ☺ Du brauchst übrigens nur "{3}" und nicht "{3, 3}". Ich kann jetzt mit eurer Hilfe nachvollziehen, dass man zusätzlich anweisen muss, dass der String einen Wortanfang und ein Wortende haben muss. Nein, so allgemein kann man das auch wieder nicht sagen. Die Strategie hängt ganz entschieden von den Eingaben und davon ab, was man erreichen möchte. In der Powershell mit regulären Ausdrücken arbeiten - PC-WELT. Für das Lernen empfehle ich immer den Regex Coach (läuft auch unter WINE): da kann man zusehen, wie das Matchen vor sich geht. Generell muss man zwar immer noch darauf achten, dass verschiedene Regex-Engines verschiedene Optimierungen und Features haben, aber für die Grundlagen reicht das allemal.
Wenn Sie ein Sonderzeichen als Textzeichen verwenden möchten, muss es maskiert werden. ➜ Charpter20 git: ( master) ✗ sed -n '/\$/p' data2 The cost is $4. 00 ➜ Charpter20 git: ( master) ✗ cat data2 Anchor Charakter Es gibt zwei spezielle Zeichen verwendet werden kann, um das Muster in dem Datenstrom zu Beginn oder am Ende der Zeile zu sperren 1. Die ersten Zeile Verriegelungs Caret (^) von dem ersten Leitungsmuster in den Daten definiert Stroms, beginnend chinesische Bank. Shell reguläre ausdrücke feste wortverbindungen. Wenn das Muster auf der Linie außerhalb der ersten Position auftritt, kann das Muster eines regulären Ausdrucks nicht überein. ➜ Charpter20 git: ( master) ✗ echo "The book store" | sed -n '/^book/p' ➜ Charpter20 git: ( master) ✗ echo "Books are great" | sed -n '/^Book/p' Books are great Wenn der Cursor in einen anderen Ort als den Anfang des Musters, dann ist es genau das gleiche wie ein gewöhnlicher Charakter, ist nicht mehr ein Sonderzeichen: ➜ Charpter20 git: ( master) ✗ echo "This is^ a test" | sed -n '/s^/p' This is^ a test 2.
A? wählt bei regulären Ausdrücken ebenfalls A, B und C aus, während die Linux Shell oder Windows Eingabeaufforderung nur A, AA, AB, usw. auswählt. Diesen Unterschied zu kennen ist essentiell, denn die Linux Binary grep versteht ein A* im Sinne des regulären Ausdrucks, während beispielsweise das Kommando ls -la A* im Sinne einer Wildcard interpretiert. Diese Feinheit bringt viele administratoren zur täglichen Verzweiflung, wenn Sie versuchen, im Linux-Kommando grep den Stern (*) und das Fragezeichen (? ) wie eine Wildcard zu verwenden. Welche reguläre Ausdrücke unterstützt werden, ist in der Linux Shell leider immer sehr abhängig von der binary, die Sie verwenden wollen. Beispielswiese unterstützt das kommando grep keinen Oder-Operator, sodass Sie bei einem regulären Ausdruck wie beispielsweise
grep '^\s|^#'