grep -v "grep"prende input riga per riga e genera solo le righe in cui grepnon appare. Senza -v, sarebbe uscita solo le linee in cui grep non apparire. Vedi man grepper i dettagli.
Per quanto riguarda l' greputilità stessa, non è importante che il modello greppassato ad esso come argomento sia uguale al suo nome. Ma nella maggior parte dei casi in cui grep -v grepappare 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 pscomando. 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 grepcomando è 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
grepsenza -Fconsidera 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 xfcema 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 grepanche quando non sono il grepcomando che hai appena eseguito. Potrebbero anche non essere grepcomandi: 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 grepleggere 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.