grep -v "grep"
prende input riga per riga e genera solo le righe in cui grep
non appare. Senza -v
, sarebbe uscita solo le linee in cui grep
non apparire. Vedi man grep
per i dettagli.
Per quanto riguarda l' grep
utilità stessa, non è importante che il modello grep
passato ad esso come argomento sia uguale al suo nome. Ma nella maggior parte dei casi in cui grep -v grep
appare effettivamente, questa non è una coincidenza.
grep -v grep
(o grep -v 'grep'
o grep -v "grep"
) appare spesso sul lato destro di un tubo il cui lato sinistro è un ps
comando. Questo è probabilmente dove l'hai visto. Ad esempio, potrei essere in cerca di programmi in esecuzione i cui nomi, percorsi o argomenti della riga di comando suggeriscono che sono correlati a Xfce:
ek@Io:~$ ps x | grep xfce
2955 ? Ssl 0:10 xfce4-power-manager
2958 ? S 0:00 /usr/lib/x86_64-linux-gnu/xfce4/xfconf/xfconfd
31901 pts/1 S+ 0:00 grep --color=auto xfce
Il mio grep
comando è stato mostrato nell'output, ma non è quello che sto cercando. Sto cercando informazioni sui processi che erano già in esecuzione quando ho esaminato ciò che era in esecuzione, non il processo che è in esecuzione solo a causa del mio sforzo di esaminare ciò che è in esecuzione.
Un modo comune per rimuovere questa distrazione è aggiungere un'altra pipe a grep -v grep
:
ek@Io:~$ ps x | grep xfce | grep -v grep
2955 ? Ssl 0:10 xfce4-power-manager
2958 ? S 0:00 /usr/lib/x86_64-linux-gnu/xfce4/xfconf/xfconfd
grep
senza -F
considera il suo schema come un'espressione regolare piuttosto che una stringa fissa . Quindi un altro approccio è quello di scrivere un'espressione regolare che corrisponda esattamente xfce
ma sia scritta diversamente. Per esempio:
ek@Io:~$ ps x | grep '[x]fce'
2955 ? Ssl 0:10 xfce4-power-manager
2958 ? S 0:00 /usr/lib/x86_64-linux-gnu/xfce4/xfconf/xfconfd
Questo funziona perché [x]
è una classe di caratteri che corrisponde esattamente alla lettera x
.
Un difetto di questi metodi popolari è che filtreranno le righe che contengono grep
anche quando non sono il grep
comando che hai appena eseguito. Potrebbero anche non essere grep
comandi: solo comandi i cui nomi, percorsi o argomenti della riga di comando contengono grep
. Quindi, come ha sottolineato Sergiy Kolodyazhnyy , spesso nessuno dei due modi (né nessun altro approccio che coinvolge il piping dell'output di ps
) è davvero l'ideale e, come diceva Nic Hartley , altri modi spesso usano pgrep
. Per esempio:
ek@Io:~$ pgrep -af xfce
2955 xfce4-power-manager
2958 /usr/lib/x86_64-linux-gnu/xfce4/xfconf/xfconfd
-a
mostra l'intera riga di comando. Omettilo per mostrare solo il numero ID del processo.
-f
cerca nella riga di comando completa. Omettilo per cercare solo i nomi.
man grep
leggere la pagina del manuale di riferimento per il comando o per ulteriori informazioni su determinati comandi (incluso grep), è possibileinfo grep
.... vale a dire. il tuo sistema ha una documentazione che è spesso molto utile.