ubuntuusers.de

Filtern und löschen mit grep / sed

Status: Ungelöst | Ubuntu-Version: Ubuntu 12.04 (Precise Pangolin)
Antworten |

donmikel

Anmeldungsdatum:
9. August 2017

Beiträge: Zähle...

Guten morgen liebe Forenmitglieder,

da ich etliche Jahre in Sachen Linux pausiert habe und nun wegen beruflichem Wechsel wieder dort einsteige hab ich im Moment ein kleines Problem bei dem Ihr mir sicherlich helfen könnt. ich sehe grad jedenfalls den Wald vor lauter Bäumen nicht mehr.

Problemstellung :

Ich soll aus einer Textdatei Zeilen herausfiltern und in eine neue Datei schreiben. Als Kriterien gibt es drei sog. NTNummern (mit ODER verknüpft) und eine MD_Nr (mit AND verknüpft).

Also wenn eine Zeile mit NTNummer1 UND MD_Nr = 5000 auftaucht dann bitte in die neue Datei schreiben. Wenn eine Zeile mit der NTNummer1 UND der MD_Nr = 4999 auftaucht dann NICHT in die Datei schreiben.

So weit so gut.

Mittels grep habe ich die Filterung auch so weit hin bekommen.

grep -e "#= NTNummer \"5010376" -e "#= NTNummer \"5010385" -e "#= NTNummer \"5010365" datei | grep "#= MD_Nr \"5000" > neueDatei

Nun mein Problem. Wie lösche ich im Anschluss diese Zeile aus der Originaldatei bzw. lege eine weitere Datei mit den übrigen Zeilen an ?

grep -v -e "#= NTNummer \"5010376" -e "#= NTNummer \"5010385" -e "#= NTNummer \"5010365" datei | grep -v "#= MD_Nr \"5000" > rest

bzw.

grep -v -e "#= NTNummer \"5010376" -e "#= NTNummer \"5010385" -e "#= NTNummer \"5010365" datei | grep "#= MD_Nr \"5000" > rest

Bei sed bekomme ich im moment lediglich hin, dass er mir die einzelnen Kriterien aus der Datei löscht aber nicht die UND-Verbindung zwischen NTNummer und MD_Nr

sed '/\(#= NTNummer "5010376"\) /d' datei > rest

bzw.

sed '/\(#= MD_Nr "5001"\)/d' datei > rest

Habt ihr auf den ersten Blick einen Tipp für mich wo ich ansetzen kann oder wie ich die Befehle anders aufbauen muss, damit das ganze funktioniert. Die man-Pages bringen mich im Moment hier nicht weiter.

Vielen Dank schonmal und schöne Grüße aus Hamburg

Michael

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13207

Herzlich willkommen hier im Forum!

Bitte zeig doch mal ein paar Zeilen aus Deiner Eingabe, damit wir wissen, wie die aussieht.

Nach bisher bekanntem würde ich wohl nicht sed benutzen, denn Du willst ja die gesamten Zeilen behalten. Falls die Reihenfolge in der Zeile immer gleich ist, kann man das recht elegant so machen:

1
egrep 'NTNummer "(5010376|5010385|5010365)".*MD_Nr "5000"' eingabe > ausgabe

Oder, noch ein bisschen optimiert

1
egrep 'NTNummer "50103(76|85|65)".*MD_Nr "5000"' eingabe > ausgabe

PS: Bitte nutze die Möglichkeiten, die die Forum/Syntax bietet. Das macht es meistens lesbarer.

Antworten |