Datei nach Inhalt durchsuchen > Zeile mit Inhalt löschen

German support forum

Moderators: Hacker, Stefan2, white

Post Reply
rost
Junior Member
Junior Member
Posts: 3
Joined: 2014-11-06, 19:41 UTC

Datei nach Inhalt durchsuchen > Zeile mit Inhalt löschen

Post by *rost »

Hallo.
Ich suche nach einer Möglichkeit Zeilen in TXT Files zu löschen die eine bestimmeten Inhalt haben.
Das suchen und finden ist kein Problem.
Erläuterung:
In einer Verzeichnisstruktur kommt in vielen Unterordner die gleiche Datei vor. Ich nenne sie mal xyz.ini. Diese schaut zum Beispiel so aus

###############xyz.ini##########
zeile 1 blablabla
zeile 2 blablabla
zeile 3 blablabla
zeile 4 blablabla
zeile 5 C:\temp\userxy
zeile 6 blablabla
#############################

Wenn ich nach der datei xyz.ini suche und den text c:\temp werden alle Files mit dieser Zeile wunderbar gefunden und im TC aufgelistet.

So und nun mein Problem. Ich möchte in allen gefundenen xyz.ini`s die Zeile in der mein Suchstring enthalten ist löschen. So dass die xyz.ini dannach so aussieht. Und das am besten auf einen Rutsch. Jede einzeln editieren ist Uferlos. Sind über 150 Files. Und der Suchstring kann je file auch öfter vorkommen.

###############xyz.ini##########
zeile 1 blablabla
zeile 2 blablabla
zeile 3 blablabla
zeile 4 blablabla
zeile 6 blablabla
#############################
User avatar
Dalai
Power Member
Power Member
Posts: 9974
Joined: 2005-01-28, 22:17 UTC
Location: Meiningen (Südthüringen)

Post by *Dalai »

Da brauchst du einen Editor, der mehrere Dateien gleichzeitig verarzten kann und eine vernünftige Suchen-Ersetzen-Funktion bietet. Ich empfehle Notepad++ dafür. Programm öffnen, alle Dateien im TC markieren und via Drag'n'Drop in Notepad++ ziehen und dann dort mit Strg+F Suchen und Ersetzen. Suchmodus dabei auf Erweitert stellen und die Umbrüche mit \r\n (bzw. nur \n) suchen.

MfG Dalai
#101164 Personal licence
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64

Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
User avatar
ZoSTeR
Power Member
Power Member
Posts: 1050
Joined: 2004-07-29, 11:00 UTC

Post by *ZoSTeR »

Schau Dir mal die Search & Replace Sachen von Funduc an.
User avatar
Stefan2
Power Member
Power Member
Posts: 4281
Joined: 2007-09-13, 22:20 UTC
Location: Europa

PowerShell: ForEach Subfolder modify file content suchen&

Post by *Stefan2 »

 
In allen Unterordnern nach einem bestimmtem Dateinamen suchen und darin Zeile(n) mit bestimmten Begriff löschen.

Wie wär's mit einem Skript? ZB in PowerShell?

Ich würde es mal so probieren:

- erstelle ein Backup deiner Daten
- öffne eine PoSh Konsole
- navigiere zum Hauptordner deiner Verzeichnisstruktur
- tippe das Folgende ein:

[face=timesnewroman]Get-ChildItem -Recurse -Filter xyz.ini | FOREACH{$Fld=$_.Directory; (Get-Content $_.FullName) | WHERE{$_ -notlike '*C:\TEMP\userxy*'} | Set-Content $Fld\xyz.ini.txt}
[/face]


Noch einmal, etwas aufbereitet:

Code: Select all

Get-ChildItem -Recurse -Filter xyz.ini | 
FOREACH{
	$Fld=$_.Directory; 
	(Get-Content $_.FullName) | WHERE{$_ -notlike '*C:\TEMP\userxy*'}|
	Set-Content $Fld\xyz.ini.txt
}

Oder mit Abkürzungen:

[face=timesnewroman]LS -Rec -Fil xyz.ini|%{$F=$_.Directory; (GC $_.FullName)|?{$_ -notlike '*C:\TEMP\userxy*'}|SC $F\xyz.ini.txt}
[/face]




Anmerkungen:
# -like oder -notlike arbeiten mit Jokerzeichen "*", auch um zB Leerzeichen zu erfassen

Du musst auf das Encoding Format aufpassen:
# Set-Content schreibt standardmäßig in Ansi
# ">" ist Out-File und schreibt standardmäßig Unicode
Man kann dies ändern mittels out-file -encoding parameter: Unicode, UTF8, ASCII
Mehr dazu zB bei 'Stack Overflow'.
Schau mal, wie deine INIs encoded sind.

Ach,... und den '.txt' Anhang kann man natürlich weglassen,... wenn alles funktioniert.

Testen kann man auch erst mal so:

Die Ersetzung:
[face=timesnewroman]LS -Rec -Fil xyz.ini | %{ $F=$_.Directory; (GC $_.FullName) | ?{ $_ -notlike '*C:\TEMP\userxy*' } }
[/face]

Das Neuschreiben:
[face=timesnewroman]LS -Rec -Fil xyz.ini | %{ $F=$_.Directory; (GC $_.FullName) | ?{ $_ -notlike '*C:\TEMP\userxy*' } | SC $F\xyz.ini.txt -WhatIf }
[/face]



 
Post Reply