O que significa grep -v “grep” e faz?

17

Eu queria saber o que grep -v "grep"faz e o que isso significa?

Joe
fonte
8
Você pode 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ê pode info grep... seu sistema possui documentação que geralmente é muito útil.
guiverc 24/06
12
grep -v "grep"é frequentemente usado para filtrar o grep em si enquanto lista processos e que normalmente envolve três pipelines, embora existam métodos melhores, é claro, como os pgrepque permitem muito menos "encanamento". Veja unix.stackexchange.com/q/74185/85039
Sergiy Kolodyazhnyy
13
Isso faz. Estou chamando meu rootkit grep.
Joshua
Normalmente usado em um contexto não relacionado à segurança, como ps aux | grep fubar | grep -v greponde fubarestou desenvolvendo algo que parou de responder e cuja identificação quero encontrar para que eu possa matá-lo. Suponha que há dois deles, então isso killallé inapropriado.
nigel222 25/06

Respostas:

69

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.
Eliah Kagan
fonte
10
Também vale a pena mencionar pgrepuma outra alternativa paraps | grep
Fund Monica's Lawsuit
8

grep --helpnos diz o que a -vbandeira faz:

-v, --invert-match        select non-matching lines

Você pode usar o -vsinalizador para imprimir inverte a correspondência; isto é, corresponde apenas às linhas que não contêm a palavra especificada. Por exemplo, imprima todas as linhas que não contêm a barra de palavras:

$ grep -v bar /path/to/file

( leia mais ... )

Karlom
fonte