grep

30 Exemplos Grep

30 Exemplos Grep
Você pode encontrar o grep presente nas profundezas do cérebro animal do Unix e de sistemas operacionais semelhantes ao Unix. É um programa básico usado para correspondência de padrões e foi escrito nos anos 70 junto com o resto da ferramenta UNIX que conhecemos e amamos (ou odiamos).

Aprender sobre linguagens formais e expressões regulares é um tópico empolgante. Aprender grep tem muito mais do que regexes. Para começar com ele e ver a beleza e elegância do grep, você precisa ver alguns exemplos do mundo real, primeiro.

Exemplos que são úteis e tornam sua vida um pouco mais fácil. Aqui estão 30 casos de uso e opções comuns de grep.

1. ps aux | grep

O ps aux lista todos os processos e seus pids associados. Mas muitas vezes esta lista é muito longa para um ser humano inspecionar. Canalizando a saída para um comando grep, você pode listar os processos em execução com um aplicativo muito específico em mente. Por exemplo o pode ser sshd ou nginx ou httpd.

# ps aux | grep sshd
root 400 0.0 0.2 69944 5624 ?       Ss 17:47 0:00 / usr / sbin / sshd -D
root 1076 0.2 0.3 95204 6816 ?       Ss 18:29 0:00 sshd: root @ pts / 0
root 1093 0.0 0.0 12784 932 pts / 0 S + 18:29 0:00 grep sshd

2. Grepping seus endereços IP

Na maioria dos sistemas operacionais, você pode listar todas as interfaces de rede e o IP atribuído a essa interface usando o comando ifconfig ou ip addr. Ambos os comandos produzirão muitas informações adicionais. Mas se você quiser imprimir apenas o endereço IP (digamos, para scripts de shell), você pode usar o comando abaixo:

$ ip addr | grep inet | awk 'imprimir $ 2; '
$ ip addr | grep -w inet | awk 'imprimir $ 2; '#Para linhas apenas com inet e não inet6 (IPv6)

O comando ip addr obtém todos os detalhes (incluindo os endereços IP), é então canalizado para o segundo comando grep inet que mostra apenas as linhas com inet neles. Isso é então canalizado para awk print a instrução que imprime a segunda palavra em cada linha (para simplificar).

P.S: Você também pode fazer isso sem o grep se você conhece awk bem, sabe.

3. Olhando para tentativas de SSH falhadas

Se você tiver um servidor voltado para a Internet, com um IP público, ele será constantemente bombardeado com tentativas de SSH e se você permitir que os usuários tenham acesso SSH baseado em senha (uma política que eu não recomendaria), você pode ver todas essas tentativas fracassadas usando o seguinte comando grep:

# cat / var / log / auth.log | grep “Fail”
Amostra de saída
5 de dezembro 16:20:03 debian sshd [509]: Falha na senha do root de 192.168.0.100 porta 52374 ssh2
5 de dezembro 16:20:07 debian sshd [509]: Falha na senha do root de 192.168.0.100 porta 52374 ssh2
5 de dezembro 16:20:11 debian sshd [509]: Falha na senha do root de 192.168.0.100 porta 52374 ssh2

4. Tubulação Grep para Uniq

Às vezes, grep irá mostrar muitas informações. No exemplo acima, um único IP pode estar tentando entrar em seu sistema. Na maioria dos casos, há apenas alguns desses IPs ofensivos que você precisa identificar de forma exclusiva e colocar na lista negra.

# cat / var / log / auth.log | grep "Fail" | uniq -f 3

O comando uniq deve imprimir apenas as linhas únicas. O uniq -f 3 pula os três primeiros campos (para ignorar os timestamps que nunca são repetidos) e então começa a procurar por linhas exclusivas.

5. Grepping por mensagens de erro

O uso de Grep para acesso e logs de erro não se limita apenas a SSH. Os servidores da Web (como Nginx) registram erros e acessam os logs de maneira bastante meticulosa. Se você configurar scripts de monitoramento que enviam alertas quando grep “404” retornar um novo valor. Isso pode ser bastante útil.

# grep -w "404" / var / www / nginx / access.registro
192.168.0.100 - - [06 / dez / 2018: 02: 20: 29 +0530] "GET / favicon.ico HTTP / 1.1 "404 200
"http: // 192.168.0.102 / "" Mozilla / 5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit / 537.36 (KHTML, como Gecko) Chrome / 70.0.3538.110 Safari / 537.36 "
192.168.0.101 - - [06 / dez / 2018: 02: 45: 16 +0530] "GET / favicon.ico HTTP / 1.1 "404 143
"http: // 192.168.0.102 / "" Mozilla / 5.0 (iPad; CPU OS 12_1 como Mac OS X)
AppleWebKit / 605.1.15 (KHTML, como Gecko) Versão / 12.0 Mobile / 15E148 Safari / 604.1 "

O regex pode não ser "404", mas alguma outra filtragem de regex apenas para clientes móveis ou apenas dispositivos Apple visualizando uma página da web. Isso permite que você tenha uma visão mais profunda sobre o desempenho de seu aplicativo.

6. Lista de Pacotes

Para sistemas baseados em Debian, dpkg -l lista todos os pacotes instalados em seu sistema. Você pode canalizar isso para um comando grep para procurar pacotes pertencentes a um aplicativo específico. Por exemplo:

# dpkg -l | grep "vim"

7. grep -v fileNames

Para listar todas as linhas que não contém um determinado padrão, use o sinalizador -v. É basicamente o oposto de um comando grep regular.

8. grep -l

Ele lista todos os arquivos que contêm pelo menos uma ocorrência do padrão fornecido. Isso é útil quando você está procurando por um padrão dentro de um diretório com vários arquivos. Ele apenas imprime o nome do arquivo, e não a linha específica com o padrão.

9. Opção de palavra única -w

$ grep -w fileNames

A opção -w diz ao grep para procurar o padrão dado como uma palavra inteira e não apenas uma substring de uma linha. Por exemplo, anteriormente, buscamos o endereço IP e o padrão inet imprimiu as linhas com ambos inet e inet6 listando endereços IPv4 e IPv6. Mas se usarmos -w flag apenas as linhas com inet como uma palavra precedida e seguida por espaços em branco é uma correspondência válida.

10. Expressão regular estendida

Irá frequentemente descobrir que as expressões regulares nativas do Grep são um pouco limitantes. Na maioria dos scripts e instruções você encontrará o uso do sinalizador -E e isso permitirá que você insira um padrão no que é chamado de Modo Estendido.

Aqui estão os comandos grep e grep -E para procurar as palavras Superman e Homem-Aranha.

Texto $ grep "\ (Super | Spider \) man"
Texto de $ grep -E "(Super | Spider) man"

Como você pode ver, a versão estendida é muito mais fácil de ler.

11. Grep para seus contêineres

Se você tiver um grande cluster de contêineres em execução em seu host, você pode grep por nome de imagem, status, portas que estão expondo e muitos outros atributos. Por exemplo,

$ docker ps | grep [imageName]

12. Grep para seus pods

Enquanto estamos no tópico de contêineres. O Kubernetes costuma lançar vários pods em uma determinada implantação. Embora cada pod tenha um nome exclusivo, em um determinado namespace, eles começam com o nome da implantação, normalmente. Podemos ver isso e listar todos os pods associados a uma determinada implantação.

$ kubectl get pods | grep

13. Grep para Big Data

Muitas vezes, a chamada análise de "Big Data" envolve simples pesquisa, classificação e contagem de padrões em um determinado conjunto de dados. Utilitários UNIX de baixo nível como grep, uniq, wc são especialmente bons nisso. Esta postagem do blog mostra um bom exemplo de uma tarefa realizada em meros segundos usando grep e outros utilitários Unix enquanto o Hadoop levou quase meia hora.

Por exemplo, este conjunto de dados é mais de 1.7 GB de tamanho. Ele contém informações sobre uma infinidade de partidas de xadrez, incluindo as jogadas feitas, quem ganhou, etc. Estamos interessados ​​apenas nos resultados, então executamos o seguinte comando:

$ grep "Resultado" millionbase-2.22.pgn | sort | uniq -c
221 [Resultado "*"]
653728 [Resultado "0-1"]
852305 [Resultado "1-0"]
690934 [Resultado "1 / 2-1 / 2"]

Isso levou cerca de 15 segundos em um processador de 2 núcleos / 4 threads de 4 anos. Então, da próxima vez que você estiver resolvendo um problema de "big data". Pense se você pode usar grep ao invés.

14. grep -color = auto

Esta opção permite ao grep realçar o padrão dentro da linha onde foi encontrado.

15. grep -i

A correspondência do padrão Grep é inerentemente sensível a maiúsculas e minúsculas. Mas se você não se importar com isso, então usar a opção -i tornará o grep insensível a maiúsculas e minúsculas.

16. grep -n

O sinalizador -n mostrará os números das linhas, então você não precisa se preocupar em encontrar a mesma linha mais tarde.

17. git grep

O próprio Git, o sistema de controle de versão, possui um comando grep embutido que funciona de maneira muito semelhante ao seu grep regular. Mas pode ser usado para pesquisar padrões em qualquer árvore confirmada usando a CLI nativa do git, em vez de canos tediosos. Por exemplo, se você estiver no branch master do seu repo, você pode executar o grep no repo usando:

(mestre) $ git grep

18. grep -o

O sinalizador -o é realmente útil quando você está tentando depurar um regex. Irá imprimir apenas a parte correspondente da linha, em vez de toda a linha. Então, no caso, você está recebendo muitas linhas indesejadas para um padrão fornecido e não consegue entender por que isso está acontecendo. Você pode usar o sinalizador -o para imprimir a substring ofensiva e raciocinar sobre sua regex de trás para frente a partir daí.

19. grep -x

O sinalizador -x imprimirá uma linha, se e somente se, toda a linha corresponder à sua regex fornecida. Isto é algo semelhante ao sinalizador -w que imprime uma linha se e apenas uma palavra inteira corresponde ao regex fornecido.

20. grep -T

Ao lidar com registros e saídas de scripts de shell, é mais do que provável que você encontre guias rígidas para diferenciar entre as diferentes colunas de saída. O sinalizador -T alinhará perfeitamente essas guias para que as colunas fiquem bem organizadas, tornando a saída legível por humanos.

21. grep -q

Isto suprime a saída e executa silenciosamente o comando grep. Muito útil ao substituir texto ou executar grep em um script daemon.

22. grep -P

Pessoas que estão acostumadas com a sintaxe de expressão regular perl podem usar o sinalizador -P para usar exatamente isso. Você não precisa aprender a expressão regular básica, que o grep usa por padrão.

23. grep -D [AÇÃO]

No Unix, quase tudo pode ser tratado como um arquivo. Consequentemente, qualquer dispositivo, um soquete ou um fluxo de dados FIFO pode ser alimentado para o grep. Você pode usar o sinalizador -D seguido por uma AÇÃO (a ação padrão é READ). Algumas outras opções são SKIP para pular silenciosamente dispositivos específicos e RECURSE para passar recursivamente por diretórios e links simbólicos.

24. Repetição

Se estiver procurando por um determinado padrão que é uma repetição de um padrão mais simples conhecido, use chaves para indicar o número de repetições

$ grep -E “[0-9] 10”

Isso imprime linhas contendo strings de 10 ou mais dígitos.

25. Taquigrafia de repetição

Alguns caracteres especiais são reservados para um tipo específico de repetição de padrão. Você pode usá-los em vez de colchetes, se eles atenderem às suas necessidades.

? : O padrão que precede o ponto de interrogação deve corresponder a zero ou uma vez.

*: O padrão que precede a estrela deve corresponder a zero ou mais vezes.

+ : O padrão que precede o sinal de mais deve corresponder uma ou mais vezes.

25. Byte Offsets

Se você quiser saber o deslocamento de byte das linhas onde a expressão correspondente é encontrada, você pode usar o sinalizador -b para imprimir os deslocamentos também. Para imprimir o deslocamento apenas da parte correspondente de uma linha, você pode usar o sinalizador -b com o sinalizador -o.

$ grep -b -o [nome do arquivo]

Offset significa simplesmente, depois de quantos bytes desde o início do arquivo a string correspondente começa.

26. egrep, fgrep e rgerp

Você frequentemente verá a invocação de egrep, para usar a sintaxe de expressão regular estendida que discutimos anteriormente. No entanto, esta é uma sintaxe obsoleta e é recomendado que você evite usar este. Use grep -E em vez disso. Da mesma forma, use grep -F, em vez de fgrep e grep -r em vez de rgrep.

27. grep -z

Às vezes a entrada para o grep não são linhas terminando com um caractere de nova linha. Por exemplo, se você estiver processando uma lista de nomes de arquivos, eles podem vir de fontes diferentes. O sinalizador -z diz ao grep para tratar o caractere NULL como o final da linha. Isso permite que você trate o fluxo de entrada como qualquer arquivo de texto normal.

28. grep -a [nome do arquivo]

A opção -a diz ao grep para tratar o arquivo fornecido como se fosse um texto normal. O arquivo pode ser um binário, mas grep tratará o conteúdo interno, como se fosse texto.

29. grep -U [nome do arquivo]

O sinalizador -U diz ao grep para tratar os arquivos fornecidos como se fossem arquivos binários e não de texto. Por padrão, o grep adivinha o tipo de arquivo olhando os primeiros bytes. Usar esta sinalização anula essa suposição.

30. grep -m NUM

Com arquivos grandes, o grep para uma expressão pode demorar uma eternidade. No entanto, se você quiser verificar apenas os primeiros NUM números de correspondências, você pode usar o sinalizador -m para fazer isso. É mais rápido e a saída geralmente também é gerenciável.

Conclusão

Muitas das tarefas diárias de um administrador de sistema envolvem vasculhar grandes trechos de texto. Estes podem ser logs de segurança, logs de seu servidor de e-mail ou web, atividade do usuário ou até mesmo um grande texto de páginas de manual. Grep oferece aquela flexibilidade extra ao lidar com esses casos de uso.

Esperançosamente, os poucos exemplos e casos de uso acima ajudaram você a entender melhor este fóssil vivo de um software.

Como instalar o League Of Legends no Ubuntu 14.04
Se você é fã de League of Legends, esta é uma oportunidade para testar o funcionamento de League of Legends. Observe que LOL é suportado no PlayOnLinu...
Instale o último jogo de estratégia OpenRA no Ubuntu Linux
OpenRA é um motor de jogo de estratégia em tempo real Libre / Free que recria os primeiros jogos Westwood como o clássico Command & Conquer: Red Alert...
Instale o emulador Dolphin mais recente para Gamecube e Wii no Linux
O Dolphin Emulator permite que você jogue seus jogos de Gamecube e Wii escolhidos em computadores pessoais Linux (PC). Sendo um emulador de jogo disp...