grep -v "grep"recebe entrada linha por linha e gera apenas as linhas nas quais grepnão aparece. Sem -v, seria de saída apenas as linhas em que grep não aparecem. Veja man greppara detalhes.
No que diz respeito ao greppróprio utilitário, não é importante que o padrão greppassado a ele como argumento seja o mesmo que seu nome. Mas na maioria dos casos em que grep -v greprealmente aparece, isso não é coincidência.
grep -v grep(ou grep -v 'grep'ou grep -v "grep") geralmente aparece no lado direito de um tubo cujo lado esquerdo é um pscomando. É provável que você tenha visto. Por exemplo, eu posso estar procurando programas em execução cujos nomes, caminhos ou argumentos da linha de comando sugiram que eles estejam relacionados ao 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
Meu grepcomando foi mostrado na saída, mas não é o que estou procurando. Estou procurando informações sobre os processos que já estavam em execução quando examinei o que estava sendo executado, não o processo que está sendo executado apenas por causa do meu esforço para examinar o que está sendo executado.
Uma maneira comum de remover essa distração é adicionar outro canal 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
grepsem -Ftrata seu padrão como uma expressão regular e não como uma sequência fixa . Portanto, outra abordagem é escrever uma expressão regular que corresponda exatamente, xfcemas que seja escrita de maneira diferente. Por exemplo:
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
Isso funciona porque [x]é uma classe de caracteres que corresponde exatamente à letra x.
Uma falha desses métodos populares é que eles filtram as linhas que contêm grepmesmo quando não são o grepcomando que você acabou de executar. Eles podem até não ser grepcomandos - apenas comandos cujos nomes, caminhos ou argumentos da linha de comando contêm grep . Portanto, como Sergiy Kolodyazhnyy apontou , muitas vezes nenhuma dessas maneiras (nem qualquer outra abordagem que envolva a produção de ps) é realmente ideal e, como Nic Hartley mencionou , outras maneiras costumam ser usadas pgrep. Por exemplo:
ek@Io:~$ pgrep -af xfce
2955 xfce4-power-manager
2958 /usr/lib/x86_64-linux-gnu/xfce4/xfconf/xfconfd
-a mostra a linha de comando completa. Omita-o para mostrar apenas o número de identificação do processo.
-f pesquisa na linha de comando completa. Omita-o para pesquisar apenas os nomes.
man grepler a página do manual de referência para o comando ou, para obter mais informações sobre determinados comandos (incluindo grep), você podeinfo grep... seu sistema possui documentação que geralmente é muito útil.