Search & Replace Tool gesucht

EdwardBlack

Grünschnabel
Danke sheel,
Zur Notepad++ Methode. Ich habe folgendes Versucht.
Zum Test habe ich drei .txt Dateien erstellt. Diese sehen alle wie folgt aus:

Diese Zeile enthält das Wort Notepad _
Diese Zeile steht einfach nur so da 1
Diese Zeile enthält das Wort Notepad test
Diese Zeile steht einfach nur so da 2
Diese Zeile enthält das Wort Notepad test

Ich möchte das Wort

Vorgehensweise:
Alle Dateien im Ordner markiert -> Edit with Notepad++
Strg + F gedrückt
Nun habe ich wie von dir auf Seite 1 dieses Threads vorgeschlagen unter "Suchen" folgendes eingetragen:

^.*Notepad.*\R

Unter Ersetzen habe ich "" eingetragen. (leer gelassen)

Reguläre Ausdrücke ist eingeschaltet, die Checkbox daneben (findet \r und \n) ist auch eingeschaltet

EDIT: Problem gefunden. Siehe rot markierter Text. Das war mein Problem, dies darf man nicht einschalten. Jetzt funktioniert es, jedoch wird die letzte Zeile nicht markiert ? Wie kann ich das lösen?
Die einzige Methode die mir auf die schnelle einfällt, wäre am Ende jedes Dokuments mithilfe eines Scripts eine Leerzeile einzufügen.

Danke im voraus!
 

sheel

I love Asm
Hi

Code:
^.*Notepad.*\R
Das \R steht für einen Zeilenwechsel (\n oder \r\n, je nach OS),
den die letzte Zeile ja nicht hat. Mit
Code:
^.*Notepad.*$
sollte einfach jede Art von Zeilenende, inkl. dem am Dateiende, erfasst werden
 

EdwardBlack

Grünschnabel
Hallo sheel, danke, dieses mal wurde auch die letzte Zeile erfasst.
Problem: Die Zeilen werden durch Leerzeilen ersetzt, anstatt komplett gelöscht zu werden.

Außerdem würde mich sehr interessieren wie man das Python Script zum laufen bekommt.
Ich habe zunächst mal versucht eine einzige Datei mit dem Script zu bearbeiten.

Vorgehensweise:
Python 3.4 installiert
CMD geöffnet -> Zum Pfad wo das Script und die .txt Dateien liegen navigiert
Befehl eingegeben: python script.py test.txt

Ich bekomme folgenden Fehler:
File "script.py", line 12, (module)
if len(a[-1].strip()) == 0:
Index error: list index out of range

Die gesamte Datei wird gelöscht.

PS: Ich habe das Script unter Beitrag #47 verwendet, mit dem Unterschied das ich in der letzten Zeile die fehlenden Klammern bei f.close ergänzt habe.
 
Zuletzt bearbeitet:

mermshaus

Erfahrenes Mitglied
So ähnlich wie die gepostete vermutlich. Der Fehler scheint mir an der Stelle eher darauf hinzudeuten, dass du das Script auf eine leere Datei angewendet hast. Ich nehme an, dass das Script mit diesem Fall nicht rechnet.

Am Rande: Ein Standardtool wie sed sollte es auch tun.

Code:
$ sed -i '/Haus/d' *.txt

Oder wohl so, falls der Begriff nur als eigenständiges Wort gefunden werden soll (also nicht auch Zeilen mit „Haustür“):

Code:
$ sed -i '/\<Haus\>/d' *.txt

- http://stackoverflow.com/questions/...contains-a-word-in-all-text-files-of-a-folder
- http://stackoverflow.com/questions/5410757/delete-a-line-containing-a-specific-string-using-sed

(Vorsicht ist natürlich bei derlei Batch-Operationen immer angebracht.)
 

ikosaeder

Teekannen-Agnostiker
Diese Skript Version läuft bei mir mit Python 3.3 und sollte auch mit 3.4 laufen
Python:
#!/usr/bin/python3
import sys
  #Dateiname wird als Parameter dem Programmaufruf uebergeben
filename=sys.argv[1]
# Oeffnet die Datei lesend
f = open( filename, 'rU')
# Erzeugte eine Liste a mit allen Zeilen der Datei
a = f.readlines()
# Datei schliessen
f.close()
#Test ob letzte Zeile leer
if len(a[-1].strip()) == 0 :
#Letzte Zeile aus der Liste loeschen
  a.pop()
#Ausgaben der Zeilen in die urspruengliche Datei

f=open(filename,'wt')
f.write("".join(a))
f.close()

Das die Datei bei einem Skriptfehler leer ist, liegt daran, das in dieselbe Datei geschrieben wird, aus der auch gelesen wurde (Inplace Replacement). Das ist gefährlich, aber spart das Anlegen temporärer Dateien oder zusätzlicher Dateien.
 

EdwardBlack

Grünschnabel
Ok das Script hat nun funktioniert, es löscht die letzte Zeile. Danke!
Wie gehe ich jedoch vor wenn ich z.B. 10k Dateien gleichzeitig mit dem Script bearbeiten möchte?
Edit: Habs... einfach die Dateien auf das Script ziehen natürlich.


Am Rande: Ein Standardtool wie sed sollte es auch tun.
Der Befehl sed existiert nicht unter Windows, ist das ein Linux Befehl?
 

EdwardBlack

Grünschnabel
Ok danke euch. Ich habe nurnoch eine Frage zum Script.

Ich verstehe nicht wie folgende Zeile genau funktioniert, warum wird die länge überprüft, und warum wird nur gelöscht wenn das ergebnis 0 ist, warum mylist[-1] ?

Code:
if len(mylist[-1].strip()) == 0 :
  mylist.pop()