Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
-
bivvo
- Beiträge: 47
- Registriert: 16.09.2021 11:40:12
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?
oder so?
.. 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: 3077
- Registriert: 13.08.2008 17:01:41
- Wohnort: Berlin
Beitrag
von JTH » 11.01.2022 16:33:09
bivvo hat geschrieben: 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:
Manchmal bekannt als Just (another) Terminal Hacker.
-
Meillo
- Moderator
- Beiträge: 9241
- Registriert: 21.06.2005 14:55:06
- Wohnort: Balmora
-
Kontaktdaten:
Beitrag
von Meillo » 11.01.2022 16:40:36
YMMD!
Use ed once in a while!
-
bivvo
- Beiträge: 47
- Registriert: 16.09.2021 11:40:12
Beitrag
von bivvo » 11.01.2022 17:58:32
JTH hat geschrieben: 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:
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.
-
Meillo
- Moderator
- Beiträge: 9241
- Registriert: 21.06.2005 14:55:06
- Wohnort: Balmora
-
Kontaktdaten:
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:
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:
Sind deine Fragen damit geklaert?
Use ed once in a while!
-
bivvo
- Beiträge: 47
- Registriert: 16.09.2021 11:40:12
Beitrag
von bivvo » 11.01.2022 19:44:08
Meillo hat geschrieben: 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!
-
Meillo
- Moderator
- Beiträge: 9241
- Registriert: 21.06.2005 14:55:06
- Wohnort: Balmora
-
Kontaktdaten:
Beitrag
von Meillo » 11.01.2022 20:01:05
bivvo hat geschrieben: 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
Beitrag
von bivvo » 11.01.2022 20:20:55
Danke, mache ich!
-
Meillo
- Moderator
- Beiträge: 9241
- Registriert: 21.06.2005 14:55:06
- Wohnort: Balmora
-
Kontaktdaten:
Beitrag
von Meillo » 11.01.2022 20:25:03
Perfekt!
Use ed once in a while!