"grep -P" funktioniert das verläßlich?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
HansD
Beiträge: 234
Registriert: 29.04.2013 15:47:29
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

"grep -P" funktioniert das verläßlich?

Beitrag von HansD » 08.03.2018 02:02:24

Ich habe gelesen, dass es von installierten Bibliotheken abhänge, wie die regulären Ausdrücke im Perl-Stil funktionieren. Bevor hier wieder jemand behauptet, ich greife dies aus der Luft: John Bambenek/Agnieszka Klus: "grep. kurz und gut.", 1. Aufl., O'Reilly, Köln 2009, ISBN-13 978-3-89721-550-4 (Übersetzt von Thomas Demmig.)
"Die spezifischen Suchmöglichkeiten und -optionen von PCRE hängen nicht von grep selbst ab, sondern sie greifen auf die libpcre-Bibliothek und die zugrunde liegende Version von Perl zurück. Das bedeutet, dass es große Unterschiede zwischen verschiedenen Rechnern und Betriebssystemen geben kann." (S. 46, a. a. O.)
Ich möchte gerne wissen, wie es in der Praxis aussieht und welche Erfahrungen oder best practises Ihr kennt. Soll man "grep -P", also grep mit Regulären Ausdrücken im Perl-Stil verwenden oder nicht?

Anlaß dieser Frage ist, dass ich ein Shell-Script geschrieben und weitergegeben habe, dass den Umgang mit grep demonstriert. Ich arbeite derzeit an einer erweiterten Fassung des kleinen Programms. Für mich stellt sich die Frage, ob ich auf Perl-Ausdrücke ganz verzichten sollte, wenn ich das Script an andere weitergebe, oder ob die unterschiedliche Perl-Implementierung nur ein akademisches Problem ohne Praxisrelevanz ist.

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: "grep -P" funktioniert das verläßlich?

Beitrag von rendegast » 08.03.2018 03:06:28

... verwenden oder nicht?
Nein, man-page:
-P, --perl-regexp
Interpret the pattern as a Perl-compatible regular expression (PCRE).
This is highly experimental and grep -P may warn of unimplemented features.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

HansD
Beiträge: 234
Registriert: 29.04.2013 15:47:29
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Re: "grep -P" funktioniert das verläßlich?

Beitrag von HansD » 08.03.2018 05:34:38

Danke! Muss ich übersehen oder wieder vergessen haben, dass dies sogar in den Manpages steht.

PS: Ich habe alle PCRE in meinem Shell-Script durch erweiterte Reguläre Ausdrücke ("grep -E") ersetzt.

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

Re: "grep -P" funktioniert das verläßlich?

Beitrag von Meillo » 08.03.2018 08:39:38

HansD hat geschrieben: ↑ zum Beitrag ↑
08.03.2018 05:34:38
PS: Ich habe alle PCRE in meinem Shell-Script durch erweiterte Reguläre Ausdrücke ("grep -E") ersetzt.
Wenn dir das moeglich ist (was nicht immer der Fall ist, weil PCRE maechtiger ist als ERE), dann ist es sinnvoll so.


Btw: Das Vorhandensein von -P ist abhaengig von dem grep, das du hast. Die PCRE-Featureres, die du nutzen kannst, haengen von der PCRE-Bibliothek ab, die verwendet wird.


Wenn du unbedingt PCRE brauchst, dann wuerde ich statt `grep -P' eher direkt Perl hernehmen:

Code: Alles auswählen

pgrep() {
	perl -e 'my $re = shift; print grep { /$re/ } <>;' "$@"
}
Use ed once in a while!

HansD
Beiträge: 234
Registriert: 29.04.2013 15:47:29
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Re: "grep -P" funktioniert das verläßlich?

Beitrag von HansD » 09.03.2018 00:30:26

Danke für die Hinweise, Meillo.

Mein Script habe ich geschrieben, um mich zum einen noch etwas in grep zu üben, zum anderen aber vor allem, um den Nutzen und die Anwendung von grep zu demonstrieren.

Es könnte ein Element sein, das ich in einem Linuxkurs verwende, den ich mittelfristig plane. Hier vor Ort wurden früher Linuxkurse zweier kompetenter Dozenten angeboten, die nach langer Tätigkeit in dieser Funktion keine Kurse mehr geben. Da ich neben diversen IT-Qualifizierungen auch vier Linux-Kurse bei diesen beiden Dozenten besucht habe, denke ich daran, die Lücke zu füllen, damit es vor Ort wieder Einführungskurse für Linux gibt. Ist eine Idee, die mir durch den Kopf geht. Ich denke daran, mit einem Wochenendkurs über die Arbeit mit dem Linux-Terminal anzufangen.

BTW: Perl habe ich mir mal selbst angeeignet, indem ich ein recht gutes Perlbuch durchgearbeitet habe; aber ich habe Perl seitdem nicht mehr angewendet. Fand die Sprache interessant, ich hab' schon viele Programmiersprachen ausprobiert, bin also recht aufgeschlossen für so etwas.

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

Re: "grep -P" funktioniert das verläßlich?

Beitrag von Meillo » 09.03.2018 09:07:54

HansD hat geschrieben: ↑ zum Beitrag ↑
09.03.2018 00:30:26
zum anderen aber vor allem, um den Nutzen und die Anwendung von grep zu demonstrieren.
Dann wuerde ich egrep(1) (identisch zu `grep -E') statt dem normalen grep(1) verwenden. Das hat die schoener designten RegExps, die sowohl maechtiger (z.B. Alternationen) als auch schneller als auch einfacher verstaendlich sind.
Use ed once in a while!

Benutzeravatar
CH777
Beiträge: 1466
Registriert: 27.05.2008 16:37:17

Re: "grep -P" funktioniert das verläßlich?

Beitrag von CH777 » 09.03.2018 13:16:15

Meillo hat geschrieben: ↑ zum Beitrag ↑
08.03.2018 08:39:38

Code: Alles auswählen

pgrep() {
	perl -e 'my $re = shift; print grep { /$re/ } <>;' "$@"
}
pgrep gibt es allerdings schon, zum Durchsuchen laufender Prozesse. Ein anderer Name wäre daher besser.

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

Re: "grep -P" funktioniert das verläßlich?

Beitrag von Meillo » 09.03.2018 13:23:03

CH777 hat geschrieben: ↑ zum Beitrag ↑
09.03.2018 13:16:15
pgrep gibt es allerdings schon, zum Durchsuchen laufender Prozesse. Ein anderer Name wäre daher besser.
Oh, stimmt, daran habe ich nicht gedacht (ich hatte nur die Analogie zu egrep(1) und fgrep(1) im Kopf). Man sollte einen anderen Namen waehlen.
Use ed once in a while!

HansD
Beiträge: 234
Registriert: 29.04.2013 15:47:29
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Re: "grep -P" funktioniert das verläßlich?

Beitrag von HansD » 10.03.2018 03:31:38

CH777 hat geschrieben: ↑ zum Beitrag ↑
09.03.2018 13:16:15
pgrep gibt es allerdings schon, zum Durchsuchen laufender Prozesse. Ein anderer Name wäre daher besser.
Ja, habe ich im oben angegebenen Buch, das ich studiert habe, und anschliessend in anderen Linuxbüchern schon gelesen.
Anders als bei grep -F und grep -E gibt es keinen Befehl "pgrep". Der Befehl pgrep wird verwendet, um nach laufenden Prozessen auf einem Rechner zu suchen.
(a. a. O., S. 48)

Antworten