none
get-content, select-string, nur TREFFER-STRING ausgeben RRS feed

  • Frage

  • Hallo

    ich testen gerade Select-String und Regular Expression. Leider gibt es keinen Parameter der nur den String mit dem Treffer retour gibt. -MATCH

    TEXTDATEI

    eins     11
    zwei22
    drei 33
    vier   44
    fünf
    sechs  66   test

    das habe ich im Google gefunden , erweitert und funktioniert schon mal

    get-content -path c:\temp\test.txt | select-string -pattern "\d{2}" | % {$_.matches} | % {$_.value}

    jetzt wollte ich die foreach leserlicher machen aber da stimmt irgendwas nicht.

    $a = get-content -path c:\temp\test.txt | select-string -pattern "\d{2}" 
    $a
    foreach ($x in $a)
    {
    $x.value
    }

    in $a sind die richtigen Zeilen mit treffern. irgend ein kleiner Fehler hat sich noch eingeschlichen.

    ich vermute   .value da es nicht als Methode vorgeschlagen wird . Aber im ersten Beispiel wird es auch nicht vorgeschlagen und funktioniert?


    Chris



    • Bearbeitet -- Chris -- Mittwoch, 11. Januar 2017 14:23
    Mittwoch, 11. Januar 2017 12:58

Antworten

  • Moin du hast in deinem Beispiel ($a = get-content...) das "$_.matches" vergessen, ohne das gibt es kein "value".

    also entweder so:

    $a = get-content -path C:\temp\test.txt | select-string -pattern "\d{2}" 
    foreach ($x in $a)
    {
        ($x.Matches).Value
    }
    
    # oder
    
    $a = get-content -path C:\temp\test.txt | select-string -pattern "\d{2}" | % {$_.matches}
    foreach ($x in $a)
    {
        $x.Value
    }



    • Bearbeitet psott Mittwoch, 11. Januar 2017 15:08
    • Als Antwort markiert -- Chris -- Mittwoch, 11. Januar 2017 19:13
    Mittwoch, 11. Januar 2017 15:07
  • .....  Wie soll man dann das mit "Matches" erraten?  .... 

    Das ist genau der Punkt. Du musst überhaupt nicht raten. Im Gegenteil - Raten führt vermutlich meistens in die falsche Richtung.

    Bevor Du neue cmdlets benutzt, solltest Du dringend die entsprechende Hilfe lesen, komplett, inklusive der Beispiele. Eine Google-Suche bringt Dir mit ziemlicher Sicherheit zusätzlich auch Beispiele aus der "realen Welt".  Das erspart Dir in Zukunft eine Menge Frustration.

    z.B. Get-Help about_Comparison_Operators   ....   wenn Du Dich bis zum -match Operator durchgearbeitet hast, findest Du auch die Informationen zur automatischen Variablen $Matches.


    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''


    • Bearbeitet BOfH-666 Mittwoch, 11. Januar 2017 19:02 Tippfehler
    • Als Antwort markiert -- Chris -- Mittwoch, 11. Januar 2017 19:13
    Mittwoch, 11. Januar 2017 19:01

Alle Antworten

  • Moin du hast in deinem Beispiel ($a = get-content...) das "$_.matches" vergessen, ohne das gibt es kein "value".

    also entweder so:

    $a = get-content -path C:\temp\test.txt | select-string -pattern "\d{2}" 
    foreach ($x in $a)
    {
        ($x.Matches).Value
    }
    
    # oder
    
    $a = get-content -path C:\temp\test.txt | select-string -pattern "\d{2}" | % {$_.matches}
    foreach ($x in $a)
    {
        $x.Value
    }



    • Bearbeitet psott Mittwoch, 11. Januar 2017 15:08
    • Als Antwort markiert -- Chris -- Mittwoch, 11. Januar 2017 19:13
    Mittwoch, 11. Januar 2017 15:07
  • danke für die rasche Antwort und Info

    warum wird bei der IntelliSense das .Matches und .value nicht angeboten? Wie soll man dann das mit "Matches" erraten?

    korrigier mich bitte.

    $a = das Objekt mit den Treffern!

    $a.matches = (Property) sind die Objekte mit den Treffern und bringt auch bereits das gleiche Result wie mit der Foreach schleife.

    wie nennt man dann das .value ?

    so funktioniert es auch schon (ohne schleife?). get-content kann man sich auch sparen, da man bei select-string ja auch den -path angeben kann.

    $a = select-string -pattern '\d{2}'-path c:\temp\test.txt 
    ($a.matches).value


    Chris


    • Bearbeitet -- Chris -- Mittwoch, 11. Januar 2017 18:10
    Mittwoch, 11. Januar 2017 18:08
  • .....  Wie soll man dann das mit "Matches" erraten?  .... 

    Das ist genau der Punkt. Du musst überhaupt nicht raten. Im Gegenteil - Raten führt vermutlich meistens in die falsche Richtung.

    Bevor Du neue cmdlets benutzt, solltest Du dringend die entsprechende Hilfe lesen, komplett, inklusive der Beispiele. Eine Google-Suche bringt Dir mit ziemlicher Sicherheit zusätzlich auch Beispiele aus der "realen Welt".  Das erspart Dir in Zukunft eine Menge Frustration.

    z.B. Get-Help about_Comparison_Operators   ....   wenn Du Dich bis zum -match Operator durchgearbeitet hast, findest Du auch die Informationen zur automatischen Variablen $Matches.


    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''


    • Bearbeitet BOfH-666 Mittwoch, 11. Januar 2017 19:02 Tippfehler
    • Als Antwort markiert -- Chris -- Mittwoch, 11. Januar 2017 19:13
    Mittwoch, 11. Januar 2017 19:01