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 grepnã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?Ssl0: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?Ssl0: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?Ssl0: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êmgrep . 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:
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:
man grep
ler 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.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 ospgrep
que permitem muito menos "encanamento". Veja unix.stackexchange.com/q/74185/85039grep
.ps aux | grep fubar | grep -v grep
ondefubar
estou 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 issokillall
é inapropriado.Respostas:
grep -v "grep"
recebe entrada linha por linha e gera apenas as linhas nas quaisgrep
não aparece. Sem-v
, seria de saída apenas as linhas em quegrep
não aparecem. Vejaman grep
para detalhes.No que diz respeito ao
grep
próprio utilitário, não é importante que o padrãogrep
passado a ele como argumento seja o mesmo que seu nome. Mas na maioria dos casos em quegrep -v grep
realmente aparece, isso não é coincidência.grep -v grep
(ougrep -v 'grep'
ougrep -v "grep"
) geralmente aparece no lado direito de um tubo cujo lado esquerdo é umps
comando. É 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:Meu
grep
comando 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
:grep
sem-F
trata 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,xfce
mas que seja escrita de maneira diferente. Por exemplo:Isso funciona porque
[x]
é uma classe de caracteres que corresponde exatamente à letrax
.Uma falha desses métodos populares é que eles filtram as linhas que contêm
grep
mesmo quando não são ogrep
comando que você acabou de executar. Eles podem até não sergrep
comandos - apenas comandos cujos nomes, caminhos ou argumentos da linha de comando contêmgrep
. Portanto, como Sergiy Kolodyazhnyy apontou , muitas vezes nenhuma dessas maneiras (nem qualquer outra abordagem que envolva a produção deps
) é realmente ideal e, como Nic Hartley mencionou , outras maneiras costumam ser usadaspgrep
. Por exemplo:-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.fonte
pgrep
uma outra alternativa paraps | grep
grep --help
nos diz o que a-v
bandeira faz:Você pode usar o
-v
sinalizador 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:( leia mais ... )
fonte