Non sono egrep, fgrep dovrebbe essere alias da grep?


3

Poiché egrep è essenzialmente grep -EI mi aspetterei che sia un alias che chiama grep con quell'opzione. Tuttavia sul mio sistema

file `which egrep`

mostra che è un eseguibile. Inoltre egrep come alias invoca solo egrepcon l'opzione color. Perché non è un alias? Compilano un binario separato per egrep?

Solo curioso...

Risposte:


2

Dipende dal sistema operativo e dalla versione degli strumenti grep installati.

Alcuni esempi di sistemi a cui mi capita di avere accesso:

  • Ubuntu 11.04, GNU grep 2.6.3: / bin / grep, / bin / fgrep e / bin / egrep sono tre file eseguibili distinti con dimensioni diverse.

  • GNU grep 2.10 (appena pubblicato pochi giorni fa), costruito dal sorgente: lo stesso.

  • Cygwin: lo stesso.

  • CentOS 5.6 (un clone di Red Hat), GNU grep 2.5.1: / bin / egrep e / bin / fgrep sono collegamenti simbolici a / bin / grep.

  • GNU grep 2.5.1 creato dal sorgente: egrep e fgrep sono piccoli script di shell che invocano grep.

  • Solaris 9: tre diversi file (strumenti Solaris, non GNU).


1

Un tempo erano eseguibili separati, ma al giorno d'oggi è di solito un singolo eseguibile con tre hard link ("grep", "fgrep" e "egrep") che puntano tutti allo stesso programma: il programma controlla da quale nome è stato avviato, e si comporta di conseguenza.

Quindi quello che stai eseguendo è un egrep migliorato con le funzionalità degli altri due programmi inclusi: e chiamarlo con nomi diversi o con -E ti dà le funzionalità che ti aspetti.

Se digiti

ls -i `which grep`

e lo stesso per fgrep ed egrep potresti vedere che hanno tutti lo stesso numero di inode, il che significa che sono tutti lo stesso file.


Beh, almeno sul mio sistema hanno un numero di inode diverso (disattivato da 3). ma in linea di principio capisco il tuo punto. potrebbero essere collegamenti simbolici e il programma grep potrebbe cercare argv [0] per scoprire quali opzioni applicare.
Rohit Banga,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.