timsen-96
Goto Top

PowerShell mehrere Wörter suchen und ganze Zeile löschen

Guten Tag,
ich möchte mehrere Zeilen in einer Textdatei löschen lassen, wo bestimmte Wörter enthalten sind.
Beispiel:
Gras
Baum
Wolken
Erde
und als Ausgabe sollte es dann so aussehen:
Gras
Wolken

Ich schaffe es bisher nur das ganze mit einem Wort zu machen:
clear-Host
$file = Get-Content .\Test.txt

$Wort1 = '*Baum*'  
$Wort2 = '*Erde*'  

$str | out-file .\Test-Output.txt 
foreach ($str in $file)
{
	if ($str -like ($Wort1))
     {
	} else {
	   $str | out-file .\Test-Output.txt -append   
	}	
}
Sobald ich das zweite Wort mit einfüge wird nichts mehr gelöscht.
Würde mich freuen, wenn mir jemand behilflich sein könnte face-smile

Content-ID: 665767

Url: https://administrator.de/forum/powershell-mehrere-woerter-suchen-und-ganze-zeile-loeschen-665767.html

Ausgedruckt am: 08.04.2025 um 13:04 Uhr

H41mSh1C0R
H41mSh1C0R 15.04.2021 um 12:01:06 Uhr
Goto Top
Wie fügst du denn das 2te Wort ein?
Ein Weg wäre deine IF Bedingung mit einem OR um die weiteren Bedingungen zu ergänzen.

VG
timsen-96
timsen-96 15.04.2021 um 12:20:42 Uhr
Goto Top
Wenn ich es mit einem or ergänze dann wird keine Zeile gelöscht.
if ($str -like ($Wort1 -or $Wort2))
148121
Lösung 148121 15.04.2021 aktualisiert um 12:26:33 Uhr
Goto Top
$words = 'Baum','Erde'  
$filter = ($words | %{[regex]::Escape($_)}) -join '|'  
gc .\Test.txt | ?{$_ -notmatch $filter} | sc .\test-output.txt
Fertsch. So kannst du beliebig viele Begriffe in das String-Array $words packen

Gruß w.
148121
Lösung 148121 15.04.2021 aktualisiert um 12:52:25 Uhr
Goto Top
Alternativ zu oben kannst du es auch einfach mit Select-String machen das macht es noch kürzer und übersichtlicher
sls .\test.txt -Pattern 'Baum','Erde' -SimpleMatch -NotMatch | select -Expand Line | sc .\test-output.txt  
timsen-96
timsen-96 15.04.2021 um 12:34:36 Uhr
Goto Top
Vielen Lieben Dank, es funktioniert! Dankeschön!