2014-11-27 5 views
5

Ich habe eine Datei mit ein paar tausend Zeilen Text. Ich muss einige Daten daraus extrahieren, , aber die Daten, die ich brauche, sind immer 57 Zeichen von links und 37 Zeichen vom Ende. Das Bit, das ich brauche (in der Mitte), hat unterschiedliche Länge.Powershellv2 - letzte x Zeichen aus einer Zeichenfolge entfernen

z.B. 20141126_this_piece_of_text_needs_to_be_removed<b>this_needs_to_be_kept</b>this_also_needs_to_be_removed

Bisher habe ich bekam:

SELECT-STRING -path path_to_logfile.log -pattern "20141126.*<b>" | 
FOREACH{$_.Line} | 
FOREACH{ 
    $_.substring(57) 
    } 

Dies wird am Anfang der Zeile des Textes zu befreien, aber ich kann nicht sehen, wie der Text vom Ende loszuwerden.

Ich habe versucht:

$_.subString(0,-37) 
$_.subString(-37) 

aber diese nicht

Gibt es eine Möglichkeit der letzten x Zeichen loswerden funktioniert hat?

Antwort

6

Wenn ich Dich richtig verstehe, müssen Sie diese :

$_.substring(57,$_.length-57-37) 

Obwohl dies scheint nicht genau mit dem Beispiel, das Sie gab zu arbeiten, aber es wird Ihnen den unterschiedlichen Mittelteil dh geben von der sta auf 57 Zeichen beginnen rt und endend 37 Zeichen vom Ende

+0

Jubel für den, einfache, aber effektive, so wie ich mag ich. – IGGt

1

Dies ist, wie die letzten 37 Zeichen aus der Zeichenfolge zu entfernen:

$_.subString(0,$_.length-37) 

aber arco's Antwort ist die bevorzugte Lösung, um Ihr allgemeines Problem

17

die letzten x Zeichen in einem Text, den Einsatz zu entfernen:

$text -replace ".{x}$" 

dh

PS>$text= "this is a number 1234" 
PS>$text -replace ".{5}$" #drop last 5 chars 
this is a number 
+0

DANKE, dass Sie der eine Powershell-bezogene Trim-Befehl ist, der mit Nicht-String-Werten arbeitet. – seagull