PowerShell String manipulieren: substring etc.
In diesem Artikel zeige ich ein paar Beispiele für das Manipulieren von Strings (Zeichenketten)
.ToUpper()
Wandelt einen String in Großbuchstaben um
PS C:\> $("test").ToUpper()
Result:
TEST
.ToLower()
Wandelt einen String in Kleinbuchstaben um
PS C:\> $("TEST").ToLower()
Result:
test
.Contains()
Testet einen String, ob eine bestimmte Zeichenfolge vorhanden ist
PS C:\> $("TEST").Contains("ES")
Result:
True
.StartsWith()
Testet einen String, ob dieser mit einer bestimmten Zeichenfolge beginnt.
PS C:\> $("TEST").StartsWith("TE")
Result:
True
.EndsWith()
Testet einen String, ob dieser mit einer bestimmten Zeichenfolge endet.
PS C:\> $("TEST").EndsWith("ST")
Result:
True
.Replace()
Ersetzt eine bestimmte Zeichenfolge innerhalb eines Strings
PS C:\> $("TEST").Replace("TE","ersetzt")
Result:
ersetztST
.Substring()
Ersetzt Teile eines Strings anhand derer Position
PS C:\> $("TEST").Substring("1")
Result:
EST
hier ein weiters Beispiel: Anfang und Endposition:
PS C:\> $("TEST").Substring("1","2")
Result:
ES
- 1 ... nach dem ersten Zeichen
- 2 ... bis zum 2ten Zeichen
Sollte nur die Endposition verwendet werden, sieht das so aus:
PS C:\> $("TEST").Substring("","3")
Result:
TES
.TrimStart()
Entfernt bestimmte Zeichen zu Beginn des Strings:
PS C:\> $("TEST").TrimStart("TE")
Result:
ST
({{pro_count}})
Beitrag bewerten:{{percentage}} % positiv
({{con_count}})
DANKE für deine Bewertung!
Fragen / Kommentare
(sortiert nach Bewertung / Datum) [alle Kommentare(neueste zuerst)]
User: Philipp $("TEST").Substring("","3") ergibt TES und nicht EST Hier Zitat von oben ;) Sollte nur die Endposition verwendet werden, sieht das so aus: PowerShell $("TEST").Substring("","3") Ausgabe: EST
danke, habe ich korrigiert
Beitrag erstellt von Bernhard
User: Daniel Hallo Wie würde denn so etwas unter einer PS-String-Manipulation funktionieren: Ich lese eine Parameterliste aus einem Konfig-File ein und schneide das Keyword weg: foreach ($p in get-content DC_progs.cfg){ if($p.contains("CMOD_DIRS=") = "true"){ write-host $p $cmod_dirs = $p.replace("CMOD_DIRS=", "") write-host $cmod_dirs } } Resultat: CMOD_DIRS=ond_doks\scanning;ond_kasse_zgkb;ond_doks\holdmail;ond_doks\privor; ond_doks\scanning;ond_kasse_zgkb;ond_doks\holdmail;ond_doks\privor; nun müsste ich diese Liste in ein array ablegen: unter RapidQ gibt es so eine schöne INSTR-Funktion: if(INSTR($p, ";") > 0) then ai = INSTR($p, ";") ' -> ai = 18 b_dir$ = MID$($p, 1, ai - 1) ' -> split pos 1- pos 17 = ond_doks\scanning usw für die anderen Elemente der Liste Gibst es so etwas auch unter PS?
Die Antwort kommt vielleicht etwas spät, aber mag anderen noch helfen: Die Methode gibt es in PowerShell und nennt sich "split". Das kannst du einfach hinter die andere Methode "replace" hängen. Würde dann bei deinem Beispiel in etwa so aussehen: $dccfg = Get-Content DC_progs.cfg foreach ($p in $dccfg){ if($p.contains("CMOD_DIRS=")){ $p $cmod_dirs = $p.replace("CMOD_DIRS=","").split(";") $cmod_dirs } } Resultat: CMOD_DIRS=ond_doks\scanning;ond_kasse_zgkb;ond_doks\holdmail;ond_doks\privor; ond_doks\scanning ond_kasse_zgkb ond_doks\holdmail ond_doks\privor Wenn man "Write-Host" in der Ausgabe weglässt, wird es auch etwas besser sichtbar, dass man nun eine Liste zurück bekommt. LG Chris
Beitrag erstellt von anonym
replace und substring funktionieren bei mir aus irgendeinem grund nicht. Sie werden auch nicht bei den Vorschlägen für den "nächsten" Befehl vorgeschlagen
User: Philipp Neben TrimStart war für mich auch TrimEnd ganz nützlich, funktioniert ähnlich zu TrimStart ;)