[geloest] grep Fachfrage / invert Nutzung

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
bivvo
Beiträge: 47
Registriert: 16.09.2021 11:40:12

[geloest] grep Fachfrage / invert Nutzung

Beitrag von bivvo » 11.01.2022 16:28:07

Hi,

ich meine ich kann "-e 'xxx'" bei grep mehrfach aufführen. Wenn ich dann aber für die Aufzählungen verbose invert setzen möchte, sieht das dann wie folgt aus?

Code: Alles auswählen

grep -v -e 'collector' -e 'piecestore' 
oder so?

Code: Alles auswählen

grep -v -e 'collector' -v -e 'piecestore' 
.. also pro Aufzählung oder einmal vorweg? Ich bin da, trotz Selbstversuch, unschlüssig. Bei meinem letzten Versuch hätte ich 1 statt 0 erwartet:

Code: Alles auswählen

pi@raspberrypi:~ $ echo "bla blubb" | grep -e 'blubb' -v -e 'collector' -v -e 'piecestore' -c
0
pi@raspberrypi:~ $ echo "bla blubb" | grep -e 'blubb' | grep -v -e 'collector' -v -e 'piecestore' -c
1
pi@raspberrypi:~ $ echo "bla blubb blubb" | grep -e 'blubb' | grep -v -e 'collector' -v -e 'piecestore' -c
1
pi@raspberrypi:~ $ echo "bla blubb blubb" | grep -e 'blubb' | grep -v -e 'qwer' -v -e 'asdf' -c
1
pi@raspberrypi:~ $ echo "bla blubb blubb" 2>&1 | grep -e 'blubb' | grep -v -e 'qwer' -v -e 'asdf' -c
1
pi@raspberrypi:~ $ echo "bla blubb\nblubb" 2>&1 | grep -e 'blubb' | grep -v -e 'qwer' -v -e 'asdf' -c
1
pi@raspberrypi:~ $ echo "bla blubb blubb" 2>&1 | grep -e 'blubb' | grep -v -e 'blubb' -v -e 'asdf' -c
0
pi@raspberrypi:~ $ echo "bla blubb blubb" 2>&1 | grep -e 'blubb' | grep -v -e 'qwer' -v -e 'blubb' -c
0
pi@raspberrypi:~ $ echo "bla blubb blubb" 2>&1 | grep -e 'blubb' | grep -v -e 'qwer' -v -e 'blubbd' -c
1
pi@raspberrypi:~ $ echo "bla blubb blubb" 2>&1 | grep -e 'blubb' | grep -v -e 'qwer' -e 'blubb' -c
0
Zuletzt geändert von bivvo am 11.01.2022 20:21:04, insgesamt 2-mal geändert.

JTH
Moderator
Beiträge: 3023
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: grep Fachfrage / verbose Nutzung

Beitrag von JTH » 11.01.2022 16:33:09

bivvo hat geschrieben: ↑ zum Beitrag ↑
11.01.2022 16:28:07
Wenn ich dann aber für die Aufzählungen verbose setzen möchte, sieht das dann wie folgt aus?
Was stellst du dir unter einer gesprächigen Ausgabe von grep denn vor? grep hat keine verbose-Option.

Ein Blick in die Manpage hilft dir weiter. grep -v tut nicht das, was du erwartest: Es kehrt nämlich die Aufgabe des Suchmusters um:
https://manpages.debian.org/grep.1#v hat geschrieben: -v, --invert-match
Invertiert das Suchmuster, so dass alle Zeilen ausgewählt werden, die nicht auf MUSTER passen.
Manchmal bekannt als Just (another) Terminal Hacker.

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

Re: grep Fachfrage / verbose Nutzung

Beitrag von Meillo » 11.01.2022 16:40:36

YMMD! :mrgreen:
Use ed once in a while!

bivvo
Beiträge: 47
Registriert: 16.09.2021 11:40:12

Re: grep Fachfrage / verbose Nutzung

Beitrag von bivvo » 11.01.2022 17:58:32

JTH hat geschrieben: ↑ zum Beitrag ↑
11.01.2022 16:33:09
Was stellst du dir unter einer gesprächigen Ausgabe von grep denn vor? grep hat keine verbose-Option.

Ein Blick in die Manpage hilft dir weiter. grep -v tut nicht das, was du erwartest: Es kehrt nämlich die Aufgabe des Suchmusters um:
https://manpages.debian.org/grep.1#v hat geschrieben: -v, --invert-match
Invertiert das Suchmuster, so dass alle Zeilen ausgewählt werden, die nicht auf MUSTER passen.
Ja das ist mit klar. Wie ist denn das Suchmuster logisch aufgebaut? Ist 2x -e gleich einem UND oder ODER und nutzt man 1x oder x mal -v, wenn -e dem einfachen Suchmuster entspricht?

Verstehst meine Fragestellung? Sorry, wenn es unklar war oder noch ist. Bei Bedarf kann ich es mit Beispielen veranschaulichen.

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

Re: grep Fachfrage / verbose Nutzung

Beitrag von Meillo » 11.01.2022 18:09:29

Jetzt ist mir deine Fragestellung klarer geworden. (Ich aendere im Titel mal das ``verbose'' in ein ``invert'', um weitere Missverstaendnisse zu vermeiden.)

POSIX schreibt:
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/grep.html hat geschrieben: -v
Select lines not matching any of the specified patterns.
In der Manpage ist das nicht so deutlich. Hier aber wird klar, dass ein `-v' reicht. Es sorgt dafuer, dass nur Zeilen ausgegeben werden, auf die keines der Patterns zutrifft.


Mehrere Patterns werden ver-ODER-t. Das haettest du auch schnell selber experimentell testen koennen:

Code: Alles auswählen

:-Q printf 'a\nb\nc\n' | grep -e a -e b  
a
b

Sind deine Fragen damit geklaert?
Use ed once in a while!

bivvo
Beiträge: 47
Registriert: 16.09.2021 11:40:12

Re: grep Fachfrage / verbose Nutzung

Beitrag von bivvo » 11.01.2022 19:44:08

Meillo hat geschrieben: ↑ zum Beitrag ↑
11.01.2022 18:09:29
In der Manpage ist das nicht so deutlich. Hier aber wird klar, dass ein `-v' reicht. Es sorgt dafuer, dass nur Zeilen ausgegeben werden, auf die keines der Patterns zutrifft.
Yess, dann habe ich es jetzt verstanden und damit wird auch mein letztes Code-Beispiel jetzt zu einer 1, statt 0:

Code: Alles auswählen

echo "bla blubb blubb" 2>&1 | grep -e 'blubb' | grep -v -e 'qwer' -e 'blubba' -c
1
Danke euch!

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

Re: grep Fachfrage / verbose Nutzung

Beitrag von Meillo » 11.01.2022 20:01:05

bivvo hat geschrieben: ↑ zum Beitrag ↑
11.01.2022 19:44:08

Code: Alles auswählen

echo "bla blubb blubb" 2>&1 | grep -e 'blubb' | grep -v -e 'qwer' -e 'blubba' -c
1
Ich will's nur nochmal woertlich wiedergeben:

(erstes grep) Nur die Zeilen die ``blubb'' enthalten ... von denen (zweites grep) die Anzahl der Zeilen (-c) die weder ``qwer'' noch ``blubba'' enthalten.

Alternativ haette man es so machen koennen:

Code: Alles auswählen

echo ... | grep blubb | grep -v qwer | grep -v blubba | wc -l
Wobei ich nicht sagen will, dass das besser waere. Es ist nur vielleicht einfacher zu verstehen und dient der Anschauung. ;-)


Btw: Wenn dein Problem damit geloest ist, solltest du den Thread als geloest markieren. Dazu den ersten Post bearbeiten und im Titel ein `[geloest]' oder aehnliches ergaenzen.
Use ed once in a while!

bivvo
Beiträge: 47
Registriert: 16.09.2021 11:40:12

Re: grep Fachfrage / invert Nutzung

Beitrag von bivvo » 11.01.2022 20:20:55

Danke, mache ich!

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

Re: [geloest] grep Fachfrage / invert Nutzung

Beitrag von Meillo » 11.01.2022 20:25:03

Perfekt! :THX:
Use ed once in a while!

Antworten