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-Key: 665767

Url: https://administrator.de/contentid/665767

Printed on: April 18, 2024 at 23:04 o'clock

Member: H41mSh1C0R
H41mSh1C0R Apr 15, 2021 at 10:01:06 (UTC)
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
Member: timsen-96
timsen-96 Apr 15, 2021 at 10:20:42 (UTC)
Goto Top
Wenn ich es mit einem or ergänze dann wird keine Zeile gelöscht.
if ($str -like ($Wort1 -or $Wort2))
Mitglied: 148121
Solution 148121 Apr 15, 2021 updated at 10:26:33 (UTC)
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.
Mitglied: 148121
Solution 148121 Apr 15, 2021 updated at 10:52:25 (UTC)
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  
Member: timsen-96
timsen-96 Apr 15, 2021 at 10:34:36 (UTC)
Goto Top
Vielen Lieben Dank, es funktioniert! Dankeschön!