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

 

positive Bewertung({{pro_count}})
Beitrag bewerten:
{{percentage}} % positiv
negative Bewertung({{con_count}})

DANKE für deine Bewertung!

Fragen / Kommentare


(sortiert nach Bewertung / Datum) [alle Kommentare(neueste zuerst)]

✍anonym
02.10.2017 08:12
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
✍Bernhard
gepostet am 02.10.2017 08:12
danke, habe ich korrigiert

Beitrag erstellt von Bernhard

✍anonym
19.04.2017 13:33
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?
✍anonym
gepostet am 08.03.2021 11:15
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

✍anonym
28.08.2020 12:40
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

✍anonym
25.06.2018 11:20
User: Philipp 
Neben TrimStart war für mich auch TrimEnd ganz nützlich, funktioniert ähnlich zu TrimStart ;)