Vorrei una passeggiata sulle differenze tra grep, pgrep, egrep, e fgrepe come li uso.
Vorrei una passeggiata sulle differenze tra grep, pgrep, egrep, e fgrepe come li uso.
Risposte:
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 è 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 è 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 è 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.
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 .