staging.inyokaproject.org

grep

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |
Dieses Thema ist die Diskussion des Artikels grep.

kutteldaddeldu Team-Icon

Anmeldungsdatum:
1. Juli 2008

Beiträge: 3586

Gab es nicht mal das Ziel, alle (bzw. die sinnvoll verschiebbaren) Shell-Unterseiten peu à peu zugunsten „eigener“ Artikel aufzugeben? (Was ich gut fände.) In diesem Fall: Verschieben (mit Redirect) +1.

noisefloor Team-Icon

Ehemaliger
Avatar von noisefloor

Anmeldungsdatum:
6. Juni 2006

Beiträge: 28316

Hallo,

ja, das geht halt nur langsam. Ihr dürfe aber gerne helfen. ☺

Also verschieben und redirect +1

Gruß, noisefloor

Lasall

Ehemalige
Avatar von Lasall

Anmeldungsdatum:
30. März 2010

Beiträge: 7723

Hi,

noisefloor schrieb:

Also verschieben und redirect +1

Done.

Gruss Lasall

kaputtnik

Anmeldungsdatum:
31. Dezember 2007

Beiträge: 9245

Gibt es einen besonderen Grund, warum am Ende des Abschnitts grep#Listen-bracket-expressions zwei Beispiele für tr drin stehen und keine für grep?

Irritiert mich immer wieder 😕

Commander_Data

Avatar von Commander_Data

Anmeldungsdatum:
18. September 2011

Beiträge: 417

Außer grep verwenden noch einige andere Kommandos (z.B. sed) reguläre Ausdrücke, wie sie in grep#Regular-Expressions beschrieben werden. Allerdings entsprechen die von tr verwendeten SETs / Zeichenfolgen nicht ganz diesen regulären Ausdrücken. Es gibt zwar einige Ähnlichkeiten, aber auch Unterschiede. Daher habe ich das tr-Beispiel mal entfernt und noch eins für grep ergänzt.

Zur Vollständigkeit noch ein paar Unterschiede:

  • Die sets / Zeichenfolgen bei tr entsprechen etwa den Listen (bracket expressions) bei grep und anderen Kommandos. 'a-z' bei tr hieße also '[a-z]' bei grep. Allerdings ist für tr auch noch die Reihenfolge wichtig, bei bracket expressions eigentlich nicht: '[a-z0-9]' ist das gleiche wie '[0-9a-z]'

  • Bei tr gibt es keine Verankerung mit ^ und $ (Zeilenanfang / -ende). Würde auch keinen Sinn machen ...

  • ...

jubuntu79

Avatar von jubuntu79

Anmeldungsdatum:
13. Februar 2011

Beiträge: 465

get regularexpression

Stimmt das wirklich?? In der Wikipedia steht etwas anderes: global/regular expression/print

Wo gibt es eine saubere Quelle, was ist die Wahrheit?

Gruß jubuntu79

noisefloor Team-Icon

Ehemaliger
Avatar von noisefloor

Anmeldungsdatum:
6. Juni 2006

Beiträge: 28316

Hallo,

es gibt noch mehr Quellen, die das gleiche wie Wikipedia sagen. Habe die Einleitung des Artikels mal geändert.

Und unter "Links" einen ganz interessanten Blogeintrag zur Historie von grep eingefügt.

Gruß, noisefloor

jubuntu79

Avatar von jubuntu79

Anmeldungsdatum:
13. Februar 2011

Beiträge: 465

Den Blogeintrag finde ich lesenswert. Danke 👍

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17432

jubuntu79 schrieb:

get regularexpression

Stimmt das wirklich?? In der Wikipedia steht etwas anderes: global/regular expression/print

Wo gibt es eine saubere Quelle, was ist die Wahrheit?

Ich weiß nicht, wo das Get Regular ExPression als Zitat herstammt - aus einer früheren Version der Wikiseite? Jedenfalls stolperte ich heute über ein Video (10 min., 🇬🇧) von Brian Kernighan, der g/re/p bestätigt. Habe es bei den Fußnoten verlinkt.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17432

Commander_Data schrieb:

Der ganze Absatz aus der Manpage von grep:

In addition, three variant programs egrep, fgrep and rgrep are available. egrep is the same as grep -E. fgrep is the same as grep -F. rgrep is the same as grep -r. Direct invocation as either egrep or fgrep is deprecated, but is provided to allow historical applications that rely on them to run unmodified.

Man soll also grep -E bzw. grep -F aufrufen. Was mich allerdings gerade wundert, ist, dass egrep und fgrep anscheinend selbst Programmdateien sind und egrep sogar fast die Dateigröße von grep hat. Ich hatte eigentlich vermutet, egrep und fgrep seien nur symbolische Links auf grep, dass dann anhand seines Aufrufnamens entscheidet, sich wie grep -E bzw. grep -F zu verhalten, aber da habe ich mich wohl geirrt. Das nicht missbilligte rgrep ist übrigens nur ein kleines Shell-Skript, das exec grep -r "$@" aufruft.

$ ls -lh /bin/{e,f,}grep /usr/bin/rgrep
-rwxr-xr-x 1 root root 116K 2010-05-09 21:35 /bin/egrep
-rwxr-xr-x 1 root root  76K 2010-05-09 21:35 /bin/fgrep
-rwxr-xr-x 1 root root 120K 2010-05-09 21:35 /bin/grep
-rwxr-xr-x 1 root root   30 2009-02-11 02:54 /usr/bin/rgrep
$ less /bin/{e,f,}grep /usr/bin/rgrep
"/bin/egrep" may be a binary file.  See it anyway? 
"/bin/fgrep" may be a binary file.  See it anyway? 
"/bin/grep" may be a binary file.  See it anyway?
# Anmerkung: /usr/bin/rgrep wurde sofort geöffnet: Ein Shell-Skript.

Ich habe keine Idee, warum das mal so und mal so gelöst wurde und warum egrep / fgrep missbilligt ist.

Das Bild hat sich übrigens gewandelt:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
 l /bin/*grep
lrwxrwxrwx 1 root root      6 Nov 14  2015 /bin/bzegrep -> bzgrep
lrwxrwxrwx 1 root root      6 Nov 14  2015 /bin/bzfgrep -> bzgrep
-rwxr-xr-x 1 root root   3642 Mai 20  2015 /bin/bzgrep
-rwxr-xr-x 1 root root     28 Apr 29  2016 /bin/egrep
-rwxr-xr-x 1 root root     28 Apr 29  2016 /bin/fgrep
-rwxr-xr-x 1 root root 211224 Apr 29  2016 /bin/grep
-rwxr-xr-x 1 root root    140 Okt 27  2014 /bin/zegrep
-rwxr-xr-x 1 root root    140 Okt 27  2014 /bin/zfgrep
-rwxr-xr-x 1 root root   5938 Okt 27  2014 /bin/zgrep

Die Programme egrep, fgrep und das in /usr/bin beheimatete rgrep (16.04) sind jetzt Scripte, die grep aufrufen.

Vielleicht hatte zwischenzeitlich der Performancehund zugeschlagen und dafür eigene Compilate erstellt - wen jucken schon 200 kb Plattenplatz? - bevor man dann zur reinen Lehre zurückgefunden hat, womöglich auf Basis des Satzes von der unreifen Optimierung.

Wieso man keinen Alias verwendet ist mir aber auch nicht klar. Vielleicht prüfen viele Installationsscripte auf /bin/?grep.

Heinrich_Schwietering Team-Icon

Wikiteam
Avatar von Heinrich_Schwietering

Anmeldungsdatum:
12. November 2005

Beiträge: 11288

Hi!

grep kann IMHO auch das "getestet general" behalten.

so long
hank

noisefloor Team-Icon

Ehemaliger
Avatar von noisefloor

Anmeldungsdatum:
6. Juni 2006

Beiträge: 28316

Hallo,

sehe ich auch so. Letzte Änderung ist zurück gesetzt.

Gruß, noisefloor

Berlin_1946 Team-Icon

Supporter, Wikiteam

Anmeldungsdatum:
18. September 2009

Beiträge: 7478

Hallo in die Runde,

Die meisten Zeichen (darunter alle Buchstaben und Ziffern) passen auf sich selbst, zum Beispiel passt "4" auf alle Vieren.

Ich verstehe das Beispiel nicht.

Wie ich das versuche zu interpretieren: "4" ist ein Zeichen und eine Ziffer. Das sagt der 1. Teil des Zitat. Was ist mit "alle Vieren" gemeint.

Wer sind die Vier? 😇

gerold123

Avatar von gerold123

Anmeldungsdatum:
18. April 2006

Beiträge: 1201

Berlin_1946 schrieb:

Ich verstehe das Beispiel nicht.

Da bist Du nicht allein ...

Bilder

noisefloor Team-Icon

Ehemaliger
Avatar von noisefloor

Anmeldungsdatum:
6. Juni 2006

Beiträge: 28316

Hallo,

@Berlin_1946: der Artikel reißt reguläre Ausdrücke (RegEx) nur kurz an, weil grep halt damit arbeitet. Der Artikel erklärt _nicht_ (soll er auch nicht) RegEx - dazu gibt es viele bessere Seiten mit epischer Tiefe. Heißt: wenn du RegEx nicht kennst, dann hilft der kurze Abschnitt zu RegEx so oder so oder so nicht weiter.

Was mit dem Beispiel wohl gesagt werden soll ist, dass eine 4 auf alles passt, was eine 4 in der Eingabe hat, also z.B. 456, PMA4Life, Hausnummer4 usw.

Wenn du ein generelles Problem mit dem Bau von RegEx hast, am besten eine konkrete Frage im "Shell und Programmieren" Supportforum stellen.

Gruß, noisefloor