Auswählen mehrerer Muster in einer Zeichenfolge mithilfe von PowerShell

  1. Einführung in den Select-String-Befehl in Windows
  2. Verwenden Sie das Cmdlet Select-String in Windows PowerShell
Auswählen mehrerer Muster in einer Zeichenfolge mithilfe von PowerShell

PowerShell hat einen ähnlichen Befehl wie grep von Linux, der nach einem Zeichenfolgenmuster sucht und es als Ausgabe in der Befehlszeile anzeigt. In diesem Artikel wird erläutert, welches Cmdlet seine Funktion zum Suchen nach bestimmten Zeichenfolgenmustern mithilfe von Windows PowerShell erfüllt.

Einführung in den Select-String-Befehl in Windows

Der grep-Befehl unter Linux ist vergleichbar mit dem Select-String-Befehl unter Windows. Das Cmdlet sucht standardmäßig nach der ersten Übereinstimmung in jeder Zeile und zeigt dann den Dateinamen, die Zeilennummer und den Text in der übereinstimmenden Zeichenfolge an.

Der Select-String-Befehl kann auch mit mehreren Dateicodierungen arbeiten, wie z. B. Unicode-Text, indem das Codierungsformat anhand der Byte-Order-Mark (BOM) bestimmt wird. Select-String geht davon aus, dass es sich um eine UTF8-Datei handelt, wenn die BOM fehlt.

Parameter von Select-String

  • AllMatches – Normalerweise sucht der Select-String-Befehl nur nach dem ersten Treffer in jeder Zeile; Das Cmdlet sucht jedoch mit diesem Parameter nach mehr als einer Übereinstimmung. Der Parameter gibt weiterhin für jede Zeile ein einzelnes MatchInfo-Objekt aus, das alle gefundenen Übereinstimmungen enthält.
  • CaseSensitive – Bei String-Übereinstimmungen wird standardmäßig nicht zwischen Groß- und Kleinschreibung unterschieden. Dieser Parameter zwingt das Cmdlet, genau nach Übereinstimmungen mit dem Eingabemuster zu suchen.
  • Kontext – Ein Parameter, mit dem wir die Anzahl der Zeilen vor und nach der Übereinstimmung definieren können, die der Parameter anzeigen wird. Durch Anhängen dieses Parameters wird das ausgegebene MatchInfo-Objekt so modifiziert, dass es eine neue Context-Eigenschaft enthält, die die angegebenen Zeilen enthält.
  • Select-String zu einem anderen Select-String-Aufruf, der Kontext ist nicht verfügbar, da wir nur nach der einzelnen resultierenden MatchInfo-Zeileneigenschaft suchen.
  • Kultur – Wird mit dem Parameter SimpleMatch verwendet und gibt eine Kultur an, die mit dem angegebenen Muster abgeglichen werden soll. Dieser Parameter enthält Optionen wie beispielsweise en-US, es oder fr-FR.

Die Optionen Ordinal und Invariant sind zwei weitere nützliche Möglichkeiten.

  • Ordinal wird für nicht-linguistische binäre Vergleiche verwendet, während Invariant für unabhängige Kulturvergleiche verwendet wird. Dieser Parameter wurde in PowerShell 7 eingeführt und war in früheren Versionen nicht vorhanden.

Beachten Sie, dass dies die aktuelle Kultur des Systems verwendet, die wir mit dem Befehl Get-Culture ermitteln können.

  • Kodierung – Gibt die Kodierung der zu durchsuchenden Zieldatei an, die standardmäßig utf8NoBOM ist. Die Option Encoding akzeptiert ab PowerShell Core 6.2 nun numerische IDs von registrierten Codepages oder String-Namen wie Windows-1251.

    1. ASCII: Dieser Parameter verwendet die Kodierung für den ASCII (7-Bit) Zeichensatz.
    2. bigendianunicode: Dieser Parameter codiert im UTF-16-Format unter Verwendung der Big-Endian-Byte-Reihenfolge.
    3. OEM: Dieser Parameter verwendet die Standardcodierung für MS-DOS- und Konsolenprogramme.
    4. Unicode: Dieser Parameter codiert im UTF-16-Format unter Verwendung der Little-Endian-Byte-Reihenfolge.
    5. utf7: Dieser Parameter kodiert im UTF-7-Format.
    6. utf8: Dieser Parameter kodiert im UTF-8-Format.
    7. utf8BOM: Dieser Parameter codiert im UTF-8-Format mit Byte Order Mark (BOM)
    8. tf8NoBOM: Kodiert im UTF-8-Format ohne Byte Order Mark (BOM)
    9. utf32: Kodiert im UTF-32-Format.
  • Exclude – Mit dem Parameter Path schließen Sie bestimmte Elemente anhand eines Musters aus, z. B. *.txt.

  • Einschließen – Der Einschließen-Parameter, wie auch der Ausschliessen-Parameter, schließt nur Einträge ein, die einem Muster entsprechen, wie beispielsweise *.csv.

  • Liste – Dieser Parameter gibt die erste Instanz von übereinstimmendem Text aus jeder Eingabedatei zurück. Dieser Parameter soll eine schnelle und effiziente Möglichkeit bieten, eine Liste von Dateien mit übereinstimmenden Inhalten abzurufen.

  • LiteralPath weist Select-String an, die Werte als Eingabe zu verwenden, anstatt Werte wie * als Platzhalter zu interpretieren. Wenn der Pfad Escapezeichen enthält, schließen Sie diese in einfache Anführungszeichen ein, um sie nicht zu analysieren.

  • NoEmphasis – Dieser Parameter deaktiviert die Hervorhebung von Übereinstimmungen. Der Parameter Hervorhebung verwendet Negativfarben basierend auf den Hintergrundtextfarben.

  • NotMatch – Dieser Parameter sucht nach Text, der nicht mit dem angegebenen Muster übereinstimmt.

  • Pfad – Mit diesem Parameter wird der Pfad zu den zu durchsuchenden Dateien angegeben. Wir können Platzhalter verwenden, aber wir können nicht einfach ein Verzeichnis angeben.

    Das lokale Verzeichnis ist die Standardeinstellung.

  • Pattern – Dieser Parameter gibt das Muster an, um den Eingabeinhalt oder die Dateien basierend auf regulären Ausdrücken zu durchsuchen.

  • SimpleMatch – Anstelle von regulären Ausdrücken verwendet dieser Parameter eine einfache Übereinstimmung. Da kein regulärer Ausdruck verwendet wird, ist das Matches-Feld des zurückgegebenen MatchInfo-Objekts leer.

  • Raw – Dieser Parameter gibt die passenden Strings ohne ein MatchInfo-Objekt aus. Dieses Verhalten ist grep am ähnlichsten und nicht der eher objektorientierten Natur von PowerShell.

  • Quiet – Gibt nur einen booleschen Wert von $true oder $false zurück, wenn das Muster gefunden wird.

Verwenden Sie das Cmdlet Select-String in Windows PowerShell

Lassen Sie uns Beispiele zeigen und sehen, wie wir Select-String nutzen können, um das Auffinden von Textübereinstimmungen zu erleichtern. Beginnen wir mit einem einfachen Beispiel und suchen wir in einer Handvoll CSV-Dateien nach John.

Beispielcode:

Select-String -Path "PS\*.csv" -Pattern "John"

Ausgang:

PS\user1.csv:3:John,Doe,jdoe@test.com,Male
PS\user2.csv:5:John,Johnson,jjohnson@abccompany.com,Male

Wir können uns auch die Anzeigeeigenschaften jeder Ausgabe ansehen.

Beispielcode:

Select-String -Path "Users\*.csv" -Pattern "John" | Select-Object * -First 1

Ausgang:

IgnoreCase : True
LineNumber : 3
Line       : John,Doe,jdoe@test.com,Male
Filename   : user1.csv
Path       : C:\Temp\PS
Pattern    : John
Context    :
Matches    : {2}

Wenn wir nach mehreren Mustern suchen möchten, können wir die Parameterwerte mit einem Komma unter dem Parameter Muster trennen.

Beispielcode:

Select-String -Path "Users\*.csv" -Pattern "John", "Henry", "Jonathan"
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

Verwandter Artikel - PowerShell String