sed und suchen und löschen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
medias
Beiträge: 90
Registriert: 18.05.2014 11:21:43

sed und suchen und löschen

Beitrag von medias » 19.01.2015 03:32:30

Ich habe hier eine Textdatei. Irgendwo steht das Wort "test" . Also das Einzelwort "test" bildet eine Zeile. Daneben gibt es "test" noch x-Mal als Wortbestandteil. Gefunden habe ich es mit einem
sed -n '/^.\{5\}/!p'

Ok, ich habe jetzt versucht es mit sed zu löschen. Das will mir nicht gelingen. Ein
sed -n '/test/p'
zeigt mir über 20.000 Zeilen an in den irgendwo "test" vorkommt.

Wie schaffe ich es das mir sed nur diese Zeile anzeigt?
Wie kann ich mit sed diese Zeile löschen?
Zuletzt geändert von medias am 25.01.2015 19:48:48, insgesamt 2-mal geändert.

Benutzeravatar
ThorstenS
Beiträge: 2875
Registriert: 24.04.2004 15:33:31

Re: sed und suchen und löschen

Beitrag von ThorstenS » 19.01.2015 07:05:51

Code: Alles auswählen

< LOGFILE sed -n '/^test$/p' 

Code: Alles auswählen

sed -i '/^test$/d' LOGFILE

Benutzeravatar
Meillo
Moderator
Beiträge: 8817
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: sed und suchen und löschen

Beitrag von Meillo » 19.01.2015 11:24:49

ThorstenS hat geschrieben:

Code: Alles auswählen

< LOGFILE sed -n '/^test$/p' 
Alternativ evtl:

Code: Alles auswählen

grep -Fx 'test'
(Das ist insbesondere dann geeignet, wenn der Wert in einer Variablen steht.)


Und um diese Zeilen zu loeschen:

Code: Alles auswählen

grep -Fxv 'test' alt >neu
# mv neu alt
Use ed once in a while!

Benutzeravatar
ThorstenS
Beiträge: 2875
Registriert: 24.04.2004 15:33:31

Re: sed und suchen und löschen

Beitrag von ThorstenS » 19.01.2015 14:43:28

der Blick in die manpage lohnt immer wieder. -Fx kannte ich so noch nicht, habe in einigen Scripten die unleserlichere Version grep "^\b$TEXT\b$" benutzt.
wieder was gelernt, danke dir!

medias
Beiträge: 90
Registriert: 18.05.2014 11:21:43

Re: sed und suchen und löschen

Beitrag von medias » 21.01.2015 23:22:31

Danke für die Antworten. Mir hat das ^ gefehlt.

medias
Beiträge: 90
Registriert: 18.05.2014 11:21:43

Re: sed und suchen und löschen

Beitrag von medias » 25.01.2015 19:48:11

Meillo hat geschrieben:
ThorstenS hat geschrieben:

Code: Alles auswählen

< LOGFILE sed -n '/^test$/p' 
Alternativ evtl:

Code: Alles auswählen

grep -Fx 'test'
(Das ist insbesondere dann geeignet, wenn der Wert in einer Variablen steht.)


Und um diese Zeilen zu loeschen:

Code: Alles auswählen

grep -Fxv 'test' alt >neu
# mv neu alt
Wenn ich jetzt nicht nur die Zeile mit dem Wort "test" löschen möchte, sondern auch noch die Zeilen die das Wort "test2" und "test3" ... enthalten, wie kann ich das mit einem Einzeiler erledigen?

rsi
Beiträge: 31
Registriert: 23.01.2015 05:56:49

Re: sed und suchen und löschen

Beitrag von rsi » 25.01.2015 22:14:42

Code: Alles auswählen

sed -i '/^[tT]est[0-9]*$/d' dateiname
oder

Code: Alles auswählen

sed -i '/^[tT]est[0-9]*\s*$/d' dateiname
falls du nicht sicher bist, ob hinter dem "Test" noch Leerzeichen stehen.

Gruß
Es gibt Menschen, die Helfen können und es gibt den Rest, die man gleich ignorieren sollte...

medias
Beiträge: 90
Registriert: 18.05.2014 11:21:43

Re: sed und suchen und löschen

Beitrag von medias » 26.01.2015 11:30:43

rsi hat geschrieben:

Code: Alles auswählen

sed -i '/^[tT]est[0-9]*$/d' dateiname
oder

Code: Alles auswählen

sed -i '/^[tT]est[0-9]*\s*$/d' dateiname
falls du nicht sicher bist, ob hinter dem "Test" noch Leerzeichen stehen.

Gruß
Äh :) sorry, so war das nicht gemeint. Meine Beispiele waren blöd gewählt, :) Ich meine: Wie kann ich mit einem sed Einzeiler gleich mehrere Zeilen mit unterschiedlichen strings löschen. Ich möchte die Zeile löschen die nur das Wort "test" enthält, aber auch Zeilen löschen die nur das Wort "Duden", "Winter", oder "Saldo" enthalten.

Benutzeravatar
ThorstenS
Beiträge: 2875
Registriert: 24.04.2004 15:33:31

Re: sed und suchen und löschen

Beitrag von ThorstenS » 26.01.2015 11:51:54

probiers mal mit grep und einer Textdatei, die pro Zeile ein auszufilterndes Wort enthält:

Code: Alles auswählen

echo -e "Duden\nLange Zeile\nTest\nTest bleibt erhalten\nWinter\n Winter\n" > textdatei.test
echo -e "Winter\nTest" > grep.dateiliste
grep -vFx -f grep.dateiliste textdatei.test

Antworten