Ich habe also mehrere große Textdateien, die ich sortieren und alle Vorkommen von Zeilen entfernen muss, die ein bestimmtes Schlüsselwort enthalten. Also im Grunde, wenn ich diese Zeilen habe:
Dies ist kein Test
Dies ist ein Test
Vielleicht ein Test Auf
jeden Fall kein Test
Und ich starte das Skript mit 'nicht', ich muss die Zeilen 1 und 4 komplett löschen.
Ich habe versucht mit:
PS C:\Users\Admin> (Get-Content "D:\Logs\co2.txt") |
Foreach-Object {$_ -replace "3*Program*", ""} |
Set-Content "D:\Logs\co2.txt"
Es ersetzt jedoch nur das 'Programm' und nicht die gesamte Zeile.
windows-7
powershell
script
karel
quelle
quelle
Set-Content
? Ich glaube nicht, dass diesSet-Content
ein Ersatz istOut-File
.Get-Content .\in.txt | Where-Object {$_ -notmatch 'not'} | Set-Content out.txt
Out-File ist im Grunde genommen Set-Content, führt die Eingabe jedoch über die Standardformatierung aus, anstatt über eine einfache Zeichenfolgenkonvertierung.Das wird funktionieren:
quelle
Sie können auch 'Select-String' mit der Option -notmatch verwenden:
quelle
Ich brauchte nur, um dies zum Laufen zu bringen und kam mit den folgenden:
Der Schlüssel ist, dass das 'Where-Object', das einen Skriptblock verwendet (wie durch die geschweiften Klammern angegeben), die Deklaration der Variablen in einem Skriptblockerstellungsereignis erfordert, daher das
Linie.
Durch diese Strukturierung kann eine Funktion erstellt, eine teilweise passende Textzeichenfolge übergeben, die Skriptblockerstellung mit dem übergebenen Wert durchgeführt und ordnungsgemäß ausgeführt werden.
Die obigen Antworten erklären nicht korrekt, wie der zu ersetzende Wert in einer Variablen übergeben wird.
quelle