Vorrei una passeggiata sulle differenze tra grep
, pgrep
, egrep
, e fgrep
e come li uso.
Vorrei una passeggiata sulle differenze tra grep
, pgrep
, egrep
, e fgrep
e 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: -c
per contare il numero di corrispondenze riuscite e non stampare le corrispondenze effettive, -i
rendere insensibile il caso di ricerca, -n
stampare il numero di riga prima di ogni stampa delle corrispondenze, -v
per prendere il complemento dell'espressione regolare (ovvero restituire le righe che non corrispondono) e -l
per 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 mysql
che restituirebbe un ID processo come 7312.
pgrep
manuale : 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 .