Forum: PC Hard- und Software in langer Textdatei viele Zeilen löschen


von ●DesIntegrator ●. (Firma: FULL PALATINSK) (desinfector) Benutzerseite


Lesenswert?

Ich habe eine lange Textdatei und möchte den gefühlt 10000 mal 
wiederkehrenden String
"    #"
(4 mal Space dann #)
löschen und zwar so, dass auch diese Zeile mit gelöscht wird.

wie kriegt man das mit einem Texteditor hin?

also z.B. in der Maske
>>Ersetzen / alles ersetzen
>>suchen nach - ersetzen durch

schaffe ich es, dass zwar die Zeile dann leer bleibt,
aber diese Zeile soll noch gelöscht werden.
ich kam dann auf den Alt-Code für Backspace aber das geht leider nicht.

Somit wäre das Dokument dann ca 30 meter kürzer.

von Stefan P. (form)


Lesenswert?

grep -v "    #" old.txt > new.txt

von John D. (Gast)


Lesenswert?

Dann nimm halt Word (oder etwas ähnliches) und im Suchen-Feld den 
Paragraph Mark dazu.

von john (Gast)


Lesenswert?

Wenn Du ein Betriebssystem benutzt, dann mit cat und grep.

von c.m. (Gast)


Lesenswert?

geany, regex search nach "^    #$", ersetzen durch nichts.
vim, :g/^    #$/d

von Flo (Gast)


Lesenswert?

im notepad++ gehts mit Suchen/Ersetzen

Suche nach:     #\r\n
Ersatzen durch:

von c.m. (Gast)


Lesenswert?

perl -ne 'print "$_" unless /^    #/g' <in.txt >out.txt

HACH!! ich könnt grad so weiter machen ^^

von Peter D. (peda)


Lesenswert?

find /V "    #" old.txt > new.txt

http://www.robvanderwoude.com/find.php

von c.m. (Gast)


Lesenswert?

Stefan P. schrieb:
> grep -v "    #" old.txt > new.txt

nah.

egrep -v "^    #$" <old.txt > new.txt

von c.m. (Gast)


Lesenswert?

Peter D. schrieb:
> find /V "    #" old.txt > new.txt
>
> http://www.robvanderwoude.com/find.php

hat das selbe problem wie

> grep -v "    #" old.txt > new.txt

von Peter D. (peda)


Lesenswert?

c.m. schrieb:
> hat das selbe problem wie
>
>> grep -v "    #" old.txt > new.txt

Also bei mir funktioniert es (Windows 7).
Allerdings gibt find noch den Dateinamen aus.
Daher:
findstr /V "    #" old.txt > new.txt

von Gregor O. (zappes)


Lesenswert?

Eure Lösungen sind nicht Enterprise Enabled. Korrekt wäre hier eine 
Java-Webapplikation, die Funktionen zum Löschen von Zeilen mit 
parametrierbarem Präfix über eine REST-Schnittstelle zur Verfügung 
stellt.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

1
ed file.txt <<EOF
2
g/^  *#/d
3
w
4
q
5
EOF

von Peter D. (peda)


Lesenswert?

Der Befehl "ed" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.

von Der Andere (Gast)


Lesenswert?

Vieleicht griegt noch jemand raus, wie man das mit edlin hinkriegt?
Und/oder mit vi

:-)

von c.m. (Gast)


Lesenswert?

na das lustige ist doch, das sowas mit gnu-tools eine leichte übung ist, 
während man sich unter "dem besten windows aller zeiten" immernoch den 
kopp zerbrechen muss.

respektive… vielleicht kann die powershell ja sowas(?).

von Vergangener (Gast)


Lesenswert?

c.m. schrieb:
> während man sich unter "dem besten windows aller zeiten" immernoch den
> kopp zerbrechen muss.

Die Lösung mit Notepad++ wurde doch schon gezeigt. War übrigens die 
kürzeste und einfachste.

von Norbert (Gast)


Lesenswert?

Der Andere schrieb:
> Vieleicht griegt noch jemand raus, wie man das mit edlin hinkriegt?
> Und/oder mit vi
>
> :-)


Na gerne:

ESC
:1,$g/^    #/:d

von DAU (Gast)


Lesenswert?

Peter D. schrieb:
> Der Befehl "ed" ist entweder falsch geschrieben oder
> konnte nicht gefunden werden.

Bei mir auch. Ist mein Betriebssystem kaputt?

von John D. (Gast)


Lesenswert?

c.m. schrieb:
> na das lustige ist doch, das sowas mit gnu-tools eine leichte
> übung ist,
> während man sich unter "dem besten windows aller zeiten" immernoch den
> kopp zerbrechen muss.

WTF? Die Aufgabe des TE ist mit Suchen/Ersetzen in Word kein Thema. 
Erwiesenermaßen schafft das damit sogar jemand aus der 
Managementebene...

von Klaus W. (mfgkw)


Lesenswert?

DAU schrieb:
> Peter D. schrieb:
>> Der Befehl "ed" ist entweder falsch geschrieben oder
>> konnte nicht gefunden werden.
>
> Bei mir auch. Ist mein Betriebssystem kaputt?

ja, bei mir geht's.

von DAU (Gast)


Lesenswert?

Klaus W. schrieb:
> ja, bei mir geht's.

Oh .... Mist ..... dann muss ich meine CD herauskramen und
neu installieren ......  hab doch erst letze Woche ....

von Norbert (Gast)


Lesenswert?

Mich wundert, das noch niemand mit einem sed gekommen ist;-)
1
sed -n -i '{s/^    #//;te;p;:e}' DATEI
Der ist nämlich genau für solche Sachen gebaut worden.
So kann man auch mal kurz ein paar tausend Textdokumente ändern.

...und die Syntax ist auch leicht verständlich...

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Norbert schrieb:
> ...und die Syntax ist auch leicht verständlich...

Da fehlt der Smiley. :-)

Der Andere schrieb:
> Und/oder mit vi

Wenn man den "vi" als "ex" aufruft, benimmt er sich (fast) so wie
der oben genannte "ed" …  Wenn ich allerdings den mit MinGW
mitgelieferten "ex" in einem cmd.exe starte, dann bekomme ich ein
Fenster “Console host has stopped working”.  Schon etwas seltsam,
dass ein ausgeführtes Programm es schafft, den Aufrufer zum Absturz
zu bringen. :-/

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Sofern man es bei Windows-Bordmitteln belässt, ist der von Peter 
Dannegger vorgestellte Aufruf von findstr in der Kommandozeile der 
simpelste und daher beste Lösungsansatz.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Rufus Τ. F. schrieb:
> Sofern man es bei Windows-Bordmitteln belässt

Wobei der TE ja nirgends was von Windows geschrieben hat. ;-)

Am Ende ist Peters "findstr /V" ja weiter nichts als die Windows-Version
von "grep -v" mit anderem Namen.  Sogar reguläre Ausdrücke können sie …

von Klaus W. (mfgkw)


Lesenswert?

Jörg W. schrieb:
> Norbert schrieb:
>> ...und die Syntax ist auch leicht verständlich...
>
> Da fehlt der Smiley. :-)

Alles schon da; Zusatzaufgabe: finden Sie den Smiley im Kommando ...

von Random .. (thorstendb) Benutzerseite


Lesenswert?

Klaus W. schrieb:
>> Da fehlt der Smiley. :-)
>
> Alles schon da; Zusatzaufgabe: finden Sie den Smiley im Kommando ...

;p
:e}

:-)

von ●DesIntegrator ●. (Firma: FULL PALATINSK) (desinfector) Benutzerseite


Lesenswert?

gnargh ich wusste doch ich hatte was vergessen.

Es geht hier mit Windows (bitte festhalten) XP
da hab ich nur den normalen Notepad oder windows Write
(das für .wri-Dateien)

oder Ubuntu:
darin Libre Office writer, gedit
oder wine-notepad (wine version 1.4)

wenn man in einer "ersetzen mit" Zeile quasi ein Zeichen für Backspace 
setzen könnte wäre das schon längst gelöst gewesen.

: Bearbeitet durch User
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

▶ J-A von der H. schrieb:
> da hab ich nur den normalen Notepad oder windows Write (das für
> .wri-Dateien)

Nö, das von Peter Danneger genannte "find" hast du dort auch, nur nicht
das neuere "findstr", welches reguläre Ausdrücke unterstützt.  Sofern
du aber wirklich nur Zeilen mit exakt vier Leerzeichen, gefolgt von
einem Doppelkreuz ausblenden willst und diese Kombination in den
übrigen Zeilen nicht auftaucht (als Teilstring), kannst du das aber
genau so benutzen.

von ●DesIntegrator ●. (Firma: FULL PALATINSK) (desinfector) Benutzerseite


Lesenswert?

also das von Herrn Dannegger beschriebene macht unter Win XP
"no such file or directory"

oder geht das anderswo als in der DOS-Box?

von (prx) A. K. (prx)


Lesenswert?

"sed" gibts auch in Windows. Nur nicht mitgeliefert.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

▶ J-A von der H. schrieb:
> no such file or directory

Du solltest das natürlich nicht stupide abtippen, sondern statt
"old.txt" deinen Dateinamen einsetzen …

von Peter D. (peda)


Lesenswert?

"old.txt" muß natürlich der Name Deiner Datei sein.

von (prx) A. K. (prx)


Lesenswert?

Norbert schrieb:
> Mich wundert, das noch niemand mit einem sed gekommen ist;-)

Zu alt. Wer traut sich schon an Programme ran, die in über 40 Jahren 
kaum verändert wurden. ;-)

von ●DesIntegrator ●. (Firma: FULL PALATINSK) (desinfector) Benutzerseite


Lesenswert?

das mit "findstr" gibt mir lauter diese Zeilen aus,
die ich gerade löschen will.

also hunderte male
"    #"
untereinander

    #
    #
    #
    #
    #
    #
    #
    #

(...)

von ichichich (Gast)


Lesenswert?

Unter Ubuntu geht beispielsweise der "grep"-Weg von oben von Haus aus.

von jmp (Gast)


Lesenswert?

Notepad++:

Datei öffnen.
Ctrl-f und "    #" eingeben.
Auf Tab "Vorkommnisse markieren" wechseln.
Haken bei "Lesezeichen setzen" reinmachen und "Alle suchen" klicken.
Jetzt sind alle Zeilen, die "    #" enthalten markiert.
Dann Menü "Suchen" -> "Lesezeichen" -> "Zeilen mit Lesezeichen löschen".

Viola :)

von ●DesIntegrator ●. (Firma: FULL PALATINSK) (desinfector) Benutzerseite


Lesenswert?

ich schreib da sja nicht so ab, wie es hier als Beispielname angegeben 
wird.
Ich nutze schon die real existierenden Dateinamen ;)

Ich habe kein Notepad++

das mit grep hat gefunzt.
endlich mal ein Pluspunkt für Ubuntu...

: Bearbeitet durch User
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

▶ J-A von der H. schrieb:
> das mit "findstr" gibt mir lauter diese Zeilen aus, die ich gerade
> löschen will.

Du hast den Parameter /V vergessen. Die Reihenfolge der Parameter bei 
findstr ist nicht egal.
1
findstr /V /c:"    #" old.txt > new.txt

Und natürlich statt "old.txt" und "new.txt" die von Dir gewünschten 
Dateinamen.

Findstr verrät übrigens auch Dinge über seine Bedienung, einfach mal
1
findstr /?

aufrufen.

von Peter D. (peda)


Lesenswert?

▶ J-A von der H. schrieb:
> das mit "findstr" gibt mir lauter diese Zeilen aus,
> die ich gerade löschen will.

Dann fehlt das /V
Mach mal die Eingabeaufforderung auf und gib "findstr -?" ein.

von ●DesIntegrator ●. (Firma: FULL PALATINSK) (desinfector) Benutzerseite


Lesenswert?

Thema erledigt, vielen Dank an alle, die sich die Zeit genommen haben :)

der grep Befehl unter Ubuntu hat gewonnen.

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

▶ J-A von der H. schrieb:
> der grep Befehl unter Ubuntu hat gewonnen.

Nicht nett, daß Du erst jetzt mit dem OS rausrückst.
Da hätte man sich viele Antworten sparen können.

von thomas_m (Gast)


Lesenswert?

ich hatte den Eindruck, das er normalerweise Windows verwendet.
Aber er hatte ja beides

"
Es geht hier mit Windows (bitte festhalten) XP
da hab ich nur den normalen Notepad oder windows Write
(das für .wri-Dateien)

oder Ubuntu:
darin Libre Office writer, gedit
oder wine-notepad (wine version 1.4)
"

von Mike B. (mike_b97) Benutzerseite


Lesenswert?

alternativ hätte ich Excel/OOCalc vorgeschlagen
nach Spalte mit dem Suchstring sortieren,
Zeilen markieren
Zeilen löschen
abspeichern

geht nur wenn auch sortiert werden darf

von Klaus W. (mfgkw)


Lesenswert?

Mike B. schrieb:
> geht nur wenn auch sortiert werden darf

Wenn du danach auch wieder zurücksortierst ...

Aber auch das wäre ja machbar:
Vor dem Sortieren eine neue Spalte mit fortlaufenden Nummern einfügen.
Nach dem Löschen der Zeilen dann nach der neuen Spalte sortieren und die 
dann wieder entfernen.
Ist jetzt nicht einfacher als mit grep, aber schön wenn es geht :-)

von ●DesIntegrator ●. (Firma: FULL PALATINSK) (desinfector) Benutzerseite


Lesenswert?

Peter D. schrieb:
> ▶ J-A von der H. schrieb:
>> der grep Befehl unter Ubuntu hat gewonnen.
>
> Nicht nett, daß Du erst jetzt mit dem OS rausrückst.
> Da hätte man sich viele Antworten sparen können.

Ich wollte halt das übliche gebattle umgehen,
welches BS nun das beste sei.

jetzt könnt Ihr, feuer frei O_°

von Norbert (Gast)


Lesenswert?

Jörg W. schrieb:
> Norbert schrieb:
>> ...und die Syntax ist auch leicht verständlich...
>
> Da fehlt der Smiley. :-)

Hey! Ich meine das Ernst!
Wie geht das alte amerikanische Sprichwort noch...-
A RegEx a day keeps the doctor away.
Oder so ähnlich.

sed,grep,awk und regex ist mein persönlicher, täglicher Alzheimer Test.

Wenn das nicht mehr funktioniert, dann verabschiede ich mich von den 
Angehörigen und gehe auf den Berg.

von Wolfgang A. (Gast)


Lesenswert?

Der Andere schrieb:
> Vieleicht griegt noch jemand raus, wie man das mit edlin hinkriegt?
> Und/oder mit vi

Früher (tm) hätte man das mit einem kleinen TECO Makro gemacht.

von Tom (Gast)


Lesenswert?

John D. schrieb:
> Die Aufgabe des TE ist mit Suchen/Ersetzen in Word kein Thema.

Da hätte ich Angst, dass irgendeine Autokorrektur zuschlägt, deren 
Auswirkungen irgendwo in den 100000 Zeilen ich erst nach Wochen der 
Fehlersuche bemerke.

von aaa (Gast)


Lesenswert?

c.m. schrieb:
> perl -ne 'print "$_" unless /^    #/g' <in.txt >out.txt
>
> HACH!! ich könnt grad so weiter machen ^^

perl -pi -e 's/^\s+#$//g' file.txt

von ●DesIntegrator ●. (Firma: FULL PALATINSK) (desinfector) Benutzerseite


Lesenswert?

Tom schrieb:
> John D. schrieb:
>> Die Aufgabe des TE ist mit Suchen/Ersetzen in Word kein Thema.
>
> Da hätte ich Angst, dass irgendeine Autokorrektur zuschlägt, deren
> Auswirkungen irgendwo in den 100000 Zeilen ich erst nach Wochen der
> Fehlersuche bemerke.

das sind dann auch so Sachen die mich an diesen Office-Programmen 
stören.
sicherlich zwar viele Brauchbare Funktionen, etliches schiesst aber zu 
weit.

Andererseits wird sich das ja wohl auch abstellen lassen.
nur ...dran denken muss man.

von Matthias L. (limbachnet)


Lesenswert?

Für solche Suchen-und-Ersetzen-Orgien von Leuten, die mit 
Kommandozeilen-Rattenschwänzen und regulären Ausdrücken nicht so geübt 
sind, ist das oben empfohlene Notepad++ ein wirklich gut nutzbares Tool. 
Auch unter XP. "Ich habe kein Notepad++" ist kein Hinderungsgrund, denn 
Internetzugang ist ja offenbar vorhanden.

von Hmm... (Gast)


Lesenswert?

Alternativ zu Notepad++ sollte es auch Geany für Windows geben. Dort 
lohnt sich auch ein Blick in die verfügbaren Plugins, ist einiges cooles 
(z.B. GDB Integration und Codehighlighting) dabei.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.