Powershell nach String suchen?

3 Antworten

Mit Foreach könntest du einen array auslesen und verarbeiten (Datei Zeilen oder nach einem Split bei Komma zum Beispiel)

Und so findest du die Wörter (Laut Stackoverflow mit "Match")

Falls du was splitten musst

Du kannst mit Substring schauen, ob es die ersten oder letzten Buchstaben sind


AKA77 
Beitragsersteller
 18.02.2021, 13:44

Hi, danke für die Antwort.

Allerdings wird mir mit Substring der erste Buchstabe des Namens weggeschnitten und nicht übersprungen. Was kann man da machen?

0
FaTech  18.02.2021, 13:51
@AKA77

Exakt! Substring bedeutet, dass man Wörter ausschneiden kann. Damit kannst du also die letzten beiden ausschneiden und dann abfragen sind die ey oder ay? Wenn ja fahre fort ...

0
AKA77 
Beitragsersteller
 18.02.2021, 13:56
@FaTech

Soweit richtig.

Aber die Namen die das enthalten sollen danach wieder ausgegeben werden. Wenn ich also von der anschließenden Suche in den Output gehe fehlt mir überall der erste Buchstabe.

0

Schade , das Du Dich nicht sehr Präzise ausdrückst...

Die gesuchten strings sollen, wenn sie am Anfang stehen ignoriert werden.

Am Anfang von was? Text? Zeile? Wort?...

Erstmal Grundlegend. Strings oder Teile von Strings tauscht man mit dem -replace-Operator

Der bequemste Weg Das passende Suchmuster zu selektieren ist ein Regex.

Ich habe dafür einen Generator:

Bild zum Beitrag

Spaß muss sein...

demo.txt :

Mahler schlutzt Meyers Bruder Schulz mit Maya Aysche
Schwupp Layer ruflburz Mayer
Schreyers Maus haurubble Eyliner

Was wollen wir?: alle Worte mit : ein oder mehr Buchstaben und (a oder e)y . (a oder e)y gegen ei tauschen.

  #Text  nach  dem  einlesen und an ein oder mehr Leerzeichen zerlegen
$myStringArray=(Get-Content 'demo.txt') -split '\s+'
  #anzeigen
$myStringArray
'
gefiltert:
'
  #alle Strings im Array welche auf  den Pattern: "ein/mehr wortzeichen und (a|e)y" passen filtern ,
$myStringArray|?{$_ -match '\w+(a|e)y'}|%{
      #mal zeigen
    $_
      #da nun sichergestellt ist, das ohenehin Mindestens ein Zeichen davor steht  einfach  tauschen  was zu tauschen ist
    $_ -replace '(a|e)y','ei'
    ''
}

kurtz:

(Get-Content 'demo.txt') -split '\s+'|?{$_ -match '\w+(a|e)y'}|%{$_ -replace '(a|e)y','ei'}

Natürlich kann man auch innerhalb eines Textes den Austausch vornehmen ohne diesen zu zelegen:

Nur (a|e)y sind unser Ziel, schaue vom Treffer zurück ob dort ein oder mehr Wordcharacter steht: (?<=\w+)(a|e)y . Ja das is schon Derb https://www.regular-expressions.info/lookaround.html

einfach unser Regexpattern auf den ganzen Text anwenden:

(Get-Content 'demo.txt') -replace '(?<=\w+)(a|e)y','ei';
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
 - (Computer, programmieren, PowerShell)

Wenn Du gezwungen bist, das mit der Powershell zu machen, habe ich keine passende Lösung, müsste mich erst reinlesen. Reguläre Ausdrücke sind das Mittel der Wahl:

https://docs.microsoft.com/de-de/powershell/module/microsoft.powershell.core/about/about_regular_expressions?view=powershell-7.1

In wenigen Sekunden würde sich das mit Notepad++ erledigen lassen, aber Dir geht es wohl eher darum, etwas zu lernen?


AKA77 
Beitragsersteller
 18.02.2021, 14:38

Genau.

Das Problem mit Powershell lösen ist Teil der Aufgabe.

0
sumpfbub  18.02.2021, 14:38
@AKA77

Tja, dann: Siehe Link oben. Nebenbei setzt Du Dich dann auch mit RegEx auseinander. Das kannst Du immer in bei allen Sprachen verwenden.

0