Discussion:
[vim] Zeilen aus Vorgaben einer anderen Datei löschen
(zu alt für eine Antwort)
Andreas Kohlbach
2015-11-03 21:28:45 UTC
Permalink
Ich habe demnächst eine größere Datei zu bearbeiten, will dazu vim, oder
wenn das nicht geht, Emacs nehmen.

Ich möchte aus dieser Datei alle Zeilen löschen, die Buchstaben-/Zahlen
haben, die in einer anderen Datei vorkommen.

Wenn in der Originaldatei z.B.

abc
def
ghi
jkl
...

steht, und in der anderen Datei

de
kl

sollen aus der Originaldatei z.B. die Zeilen

def
jkl

entfernt werden.

Ich weiß, wie man *ein* Muster entfernt:

:g/de/d

Aber kann man vim auch *mehrere* Muster aus einer anderen Datei zuführen?

Ggf. wenn das mit vim nicht geht, wie geht das in Emacs? Sollte es auch
damit nicht gehen, werde ich über eine Lösung ohne "interaktiven" Editor
mit SED nachdenken müssen. Da ich nach dem Löschen aber noch andere Sachen
von Hand bearbeiten muss, brauche ich danach eh wieder einen Editor, dass
ich das Löschen in vim vorziehen würde.
--
Andreas

I use a Unix based operating system, which means I get laid almost as often
as I have to reboot my computer.
Heiko Schlichting
2015-11-03 22:04:13 UTC
Permalink
Post by Andreas Kohlbach
Ich habe demnächst eine größere Datei zu bearbeiten, will dazu vim, oder
wenn das nicht geht, Emacs nehmen.
Ich möchte aus dieser Datei alle Zeilen löschen, die Buchstaben-/Zahlen
haben, die in einer anderen Datei vorkommen.
Sowas macht man typischerweise nicht mit einem interaktiven Editor. Das ist
zwar grundsätzlich möglich, aber wesentlich aufwändiger und langsamer als
mit einem geeigneten Tool - insbesondere wenn es sich um eine "größeree
Datei" handelt, wie Du schreibst.
Post by Andreas Kohlbach
Wenn in der Originaldatei z.B.
abc
def
ghi
jkl
...
steht, und in der anderen Datei
de
kl
sollen aus der Originaldatei z.B. die Zeilen
def
jkl
entfernt werden.
Geht mit folgendem einfachen Befehl und mit unschlagbarer Geschwindigkeit
auch für riesige Dateien:

egrep -v -f datei2 datei1

mit datei1 = "Originaldatei"
und datei2 = "andere Datei"
Post by Andreas Kohlbach
Sollte es auch
damit nicht gehen, werde ich über eine Lösung ohne "interaktiven" Editor
mit SED nachdenken müssen.
'sed' ist auch nicht das geeignete Tool für den genannten Zweck.

Heiko
Heiko Schlichting
2015-11-03 22:07:19 UTC
Permalink
Post by Andreas Kohlbach
Ich habe demnächst eine größere Datei zu bearbeiten, will dazu vim, oder
wenn das nicht geht, Emacs nehmen.
Ich möchte aus dieser Datei alle Zeilen löschen, die Buchstaben-/Zahlen
haben, die in einer anderen Datei vorkommen.
Sowas macht man typischerweise nicht mit einem interaktiven Editor. Das ist
zwar grundsätzlich möglich, aber wesentlich aufwändiger und langsamer als
mit einem geeigneten Tool - insbesondere wenn es sich um eine "größere
Datei" handelt, wie Du schreibst.
Post by Andreas Kohlbach
Wenn in der Originaldatei z.B.
abc
def
ghi
jkl
...
steht, und in der anderen Datei
de
kl
sollen aus der Originaldatei z.B. die Zeilen
def
jkl
entfernt werden.
Geht mit folgendem einfachen Befehl und mit unschlagbarer Geschwindigkeit
auch für riesige Dateien:

grep -v -f datei2 datei1

mit datei1 = "Originaldatei"
und datei2 = "andere Datei"
Post by Andreas Kohlbach
Sollte es auch
damit nicht gehen, werde ich über eine Lösung ohne "interaktiven" Editor
mit SED nachdenken müssen.
'sed' ist auch nicht das geeignete Tool für den genannten Zweck.

Heiko
Andreas Kohlbach
2015-11-04 22:15:01 UTC
Permalink
[...]
Post by Heiko Schlichting
Post by Andreas Kohlbach
Wenn in der Originaldatei z.B.
abc
def
ghi
jkl
...
steht, und in der anderen Datei
de
kl
sollen aus der Originaldatei z.B. die Zeilen
def
jkl
entfernt werden.
Geht mit folgendem einfachen Befehl und mit unschlagbarer Geschwindigkeit
grep -v -f datei2 datei1
mit datei1 = "Originaldatei"
und datei2 = "andere Datei"
Danke.
--
Andreas

I use a Unix based operating system, which means I get laid almost as often
as I have to reboot my computer.
Loading...