staging.inyokaproject.org

sed - Spalten nach Wert durchsuchen und behalten

Status: Gelöst | Ubuntu-Version: Server 22.10 (Kinetic Kudu)
Antworten |

rurotil

Anmeldungsdatum:
7. April 2009

Beiträge: 96

Hallo Leute,

ich möchte mit sed ein Script bauen, bei dem nur die Zeilen behalten werden, wo ein bestimmtes Wort vorkommt.

So war mein Ansatz, scheint aber noch nicht perfekt zu sein:

sed -i '/Schneider/d' /tmp/test.csv

Hier wäre die Test CSV

ProductId;ReferenceNo;EAN;Manufacturer;Price;Price_Discounted;Price_DiscountPercent;Price_DiscountAmount;PriceexclVAT;PriceinclVAT
3910113;AP9641;1,31304E+11;APC by Schneider Electric;19;19;0;0;0;0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1402176;P51U;8,87993E+11;Shuttle;2;2;0;0;0;0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
5750126;LC125XLC;4,97777E+12;Brother;11,7;11,7;0;0;0;0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 12527

rurotil schrieb:

ich möchte mit sed ein Script bauen, bei dem nur die Zeilen behalten werden, wo ein bestimmtes Wort vorkommt.

So war mein Ansatz, scheint aber noch nicht perfekt zu sein:

sed -i '/Schneider/d' /tmp/test.csv

Das ist ja genau das inverse von dem, was Du beschreibst: Zeilen mit "Schneider" werden gelöscht - also nicht behalten.

Warum nicht einfach

1
fgrep Schneider /tmp/test.csv

?

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17432

1
sed -n '/Schneider/p' /tmp/test.csv

Das -n sagt, per default nichts ausgeben, das p ist dann der print-Befehl.

Es druckt aber auch Schneidermann, Hof-Schneider usw.

shiro

Anmeldungsdatum:
20. Juli 2020

Beiträge: 611

Wenn du unbedingt die Aktion mit 'sed' und dem 'd' Befehl ausführen willst, brauchst du die Suche nur mit dem '!' zu negieren. Beispiel:

sed -i '/Schneider/!d' /tmp/test.csv

Man muss aber nicht immer von hinten durch die Brust schießen. Ein 'fgrep' (wie von rklm gezeigt) ist die elegantere Lösung.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 12527

shiro schrieb:

Ein 'fgrep' (wie von rklm gezeigt) ist die elegantere Lösung.

Noch ein Vorteil, den ich vorher vergessen habe zu erwähnen: wenn wirklich exakt das Wort finden will, get es mit (f)grep viel leichter, weil man nur die Option "-w" braucht.

rurotil

(Themenstarter)

Anmeldungsdatum:
7. April 2009

Beiträge: 96

Ich habe es jetzt so gelöst und es funktioinert. Danke

egrep -i 'SUCHE1|SUCHE2|SUCHE3' /test.csv > /test2.csv

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 12527

rurotil schrieb:

egrep -i 'SUCHE1|SUCHE2|SUCHE3' /test.csv > /test2.csv

Ich hoffe, Du legst die Dateien nicht im Root-Verzeichnis ab.

Übrigens kann man auch so etwas machen:

1
fgrep -iw -e SUCHE1 -e SUCHE2 -e SUCHE3 test.csv > test2.csv
Antworten |