…aber wozu braucht man so viele greps?
$ compgen -c | grep grep | wc -l 69 $ _
Hmm, ob es in der Ausgabe von compgen wohl Dopplungen gibt?
$ compgen -c | nl | sort -k2 | grep grep | sed 10q 1332 bzegrep 5085 bzegrep 3010 bzfgrep 6763 bzfgrep 3817 bzgrep 7570 bzgrep 3054 degrep 6807 degrep 1761 dfgrep 5514 dfgrep $ _
Und, wie viele greps habe ich wirklich?
$ compgen -c | grep grep | sort -u | wc -l 33 $ _
Schon etwas übersichtlicher.
Viele dieser greps sind dann kurze Skripten, die grep mit zusätzlichen Optionen aufrufen (man erkennt es an der Dateigröße), einige sind symbolische Links, einige sind Hardlinks (man erkennt es am @ beim ls -F). Hier eine Tabelle ohne Dopplungen:
$ for i in `compgen -c | grep grep`; do echo -ne "$i: "; ls -ishF `which $i`; done | column -t | sort -unk2 | nl
1 grep-dctrl: 20709639 52K /usr/bin/grep-dctrl*
2 lzegrep: 20710041 0 /usr/bin/lzegrep@
3 lzfgrep: 20710042 0 /usr/bin/lzfgrep@
4 lzgrep: 20710043 0 /usr/bin/lzgrep@
5 egrep: 20710253 4,0K /usr/bin/egrep*
6 fgrep: 20710257 4,0K /usr/bin/fgrep*
7 grep: 20710280 184K /usr/bin/grep*
8 rgrep: 20710407 4,0K /usr/bin/rgrep*
9 zipgrep: 20710858 4,0K /usr/bin/zipgrep*
10 grep-aptavail: 20711672 0 /usr/bin/grep-aptavail@
11 msggrep: 20714439 120K /usr/bin/msggrep*
12 bzgrep: 20715010 4,0K /usr/bin/bzgrep*
13 xzgrep: 20715392 12K /usr/bin/xzgrep*
14 ptargrep: 20715432 8,0K /usr/bin/ptargrep*
15 zstdgrep: 20716764 4,0K /usr/bin/zstdgrep*
16 grep-available: 20717025 0 /usr/bin/grep-available@
17 grep-debtags: 20717127 0 /usr/bin/grep-debtags@
18 grep-status: 20717191 0 /usr/bin/grep-status@
19 pgrep: 20717295 36K /usr/bin/pgrep*
20 dgrep: 20717352 4,0K /usr/bin/dgrep*
21 degrep: 20717640 0 /usr/bin/degrep@
22 bzegrep: 20719866 0 /usr/bin/bzegrep@
23 bzfgrep: 20719870 0 /usr/bin/bzfgrep@
24 dfgrep: 20720182 0 /usr/bin/dfgrep@
25 zegrep: 20720810 4,0K /usr/bin/zegrep*
26 zfgrep: 20720874 4,0K /usr/bin/zfgrep*
27 zgrep: 20720920 8,0K /usr/bin/zgrep*
28 dzegrep: 20721249 0 /usr/bin/dzegrep@
29 dzfgrep: 20721253 0 /usr/bin/dzfgrep@
30 dzgrep: 20722085 0 /usr/bin/dzgrep@
31 grepdiff: 20724261 0 /usr/bin/grepdiff@
32 xzegrep: 20743860 0 /usr/bin/xzegrep@
33 xzfgrep: 20743862 0 /usr/bin/xzfgrep@
$ _
Da sage mir niemand, dass unixoide Betrübssysteme frei von seltsamen Strokeleien seien, die man vermutlich am besten mit einem bis in die Siebziger Jahre zurückreichenden Geschichtsbuch erklären kann!
Ich finde das nicht so problematisch. Die Funktionen von »egrep« und »fgrep« sind längst ins »grep« integriert, und alle anderen sind nur eine Verkettung eines Entkomprimierers mit dem »grep«. Das alles richtet keinen Schaden an.
Schlimmer finde ich Altlasten in der Clib, all die Funktionen mit möglichem »undefined behaviour«. Wie die defekten Stringfunktionen. Oder ein qsort, das beliebigen Bufferoverflow erzeugen darf, wenn die Vergleichsfunktion keine totale Quasiordnung definiert.
Und das alles ins C++ übernommen, statt bei der Gelegenheit mal mit dem SStahlbesen durchzufegen. :-/
Und den Dreck dann über
(Sorry, der Stahlbesen hat ein S zu viel und die letzte Zeile muss weg. Die Eingabebox war bei mir rechts abgeschnitten und hatte das Scrollen verweigert.)