Qual'è la differenza tra grep, pgrep, egrep, fgrep?


Risposte:


85

Differenze tra grep, pgrep, egrep e fgrep (Linux):

grep

grep è l'acronimo di "Global Regular Expressions Print". grep è un programma che esegue la scansione di uno o più file specificati riga per riga, restituendo righe che contengono un modello. Un modello è un'espressione che specifica un insieme di stringhe interpretando i caratteri come meta-caratteri. Ad esempio, il meta carattere asterisco (*) viene interpretato come "zero o più dell'elemento precedente". Ciò consente agli utenti di digitare una breve serie di caratteri e meta-caratteri in un comando grep per fare in modo che il computer ci mostri quali righe corrispondono ai file.

Il comando grep standard è simile a:

grep <flags> '<regular expression>' <filename>

grep stampa i risultati della ricerca sullo schermo (stdout) e restituisce i seguenti valori di uscita:

0    A match was found.
1    No match was found.
>1   A syntax error was found or a file was inaccessible 
     (even if matches were found).

Alcuni flag comuni sono: -cper contare il numero di corrispondenze riuscite e non stampare le corrispondenze effettive, -irendere insensibile il caso di ricerca, -nstampare il numero di riga prima di ogni stampa delle corrispondenze, -vper prendere il complemento dell'espressione regolare (ovvero restituire le righe che non corrispondono) e -lper stampare i nomi dei file dei file con righe che corrispondono all'espressione.

egrep

egrep è l'acronimo di "Extended Global Regular Expressions Print".

La 'E' in egrep significa trattare il modello come un'espressione regolare. "Espressioni regolari estese" abbreviato "ERE" è abilitato in egrep. egrep (che è lo stesso grep -E) tratta +, ?, |, (, e )come meta-personaggi.

Nelle espressioni regolari di base (con grep), il meta-personaggi ?, +, {, |, (, e )perdono il loro significato speciale. Se si desidera grep per il trattamento di questi caratteri come meta-caratteri, sfuggire loro \?, \+, \{, \|, \(, e \).

Ad esempio, qui grep usa espressioni regolari di base in cui il plus viene trattato letteralmente, viene restituita qualsiasi riga con un plus.

grep "+" myfile.txt

egrep invece considera il "+" come un meta personaggio e restituisce ogni riga perché il plus viene interpretato come "una o più volte".

egrep "+" myfile.txt

Qui viene restituita ogni riga perché +trattata da egrep come un meta personaggio. grep normale avrebbe cercato solo le righe con un valore letterale +.

fgrep

fgrep è un acronimo che sta per "Stampa di espressioni regolari globali a stringa fissa".

fgrep (che è lo stesso di grep -F) è grep fisso o veloce e si comporta come grep ma NON riconosce alcun meta-carattere di espressione regolare come speciale. La ricerca verrà completata più rapidamente perché elabora solo una stringa semplice anziché un modello complesso.

Ad esempio, se volessi cercare nel mio .bash_profile un punto letterale (.), Usare grep sarebbe difficile perché dovrei sfuggire al punto perché dot è un meta personaggio che significa "jolly, qualsiasi singolo carattere":

grep "." myfile.txt

Il comando sopra restituisce ogni riga di myfile.txt. Fallo invece:

fgrep "." myfile.txt

Quindi solo le righe che hanno un letterale "." in essi vengono restituiti. fgrep ci aiuta a non preoccuparci di sfuggire ai nostri meta-personaggi.

pgrep

pgrep è l'acronimo di "Process-ID Global Regular Expressions Print".

pgrep esamina i processi attualmente in esecuzione ed elenca gli ID di processo che corrispondono ai criteri di selezione su stdout. pgrep è utile quando tutto quello che vuoi sapere è l'ID di processo intero di un processo. Ad esempio, se volessi conoscere solo l'ID processo del mio processo mysql, utilizzerei il comando pgrep mysqlche restituirebbe un ID processo come 7312.


Dal pgrepmanuale : il nome del processo utilizzato per la corrispondenza è limitato ai 15 caratteri presenti nell'output di / proc / pid / stat . Utilizzare l'opzione -f per abbinare l'intera riga di comando, / proc / pid / cmdline .
Pablo A
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.