Tutorial grep básico

lucianoxlucianox luciano.x
editado outubro 2015 em Dicas e Truques
Quem é familiarizado com a linha de comando certamente já usou o grep alguma vez. É um comando poderoso, rápido e muito útil para filtrar arquivos de texto ou a saída padrão de outro comando usando expressões regulares.
Ele faz uma busca por linhas que combinem com a lista de strings passada como argumento. Por padrão ele mostra a linha inteira mas é possível gerar outros tipos de saída.

[b]Noções básicas[/b]
É comum as pessoas usarem o grep desta maneira

[code]$ cat arquivo | grep tutorial[/code]

Não é errado mas é mais elegante deste jeito
[code]$ grep 'tutorial' arquivo[/code]

As aspas simples são uma boa prática para evitar a expansão de algum caractere coringa pelo shell. No exemplo acima não tem tanta relevância mas crie o hábito de usá-las.

[code]$ ls | grep 'arquivo'[/code]
[code]$ ps aux |grep 'bash'[/code]
Experimente executar o comando acima. Normalmente vai aparecer também o próprio processo do grep.
Para evitar isso, usamos [ ] assim [code]$ ps aux |grep '[b]ash'[/code]

[b]Controlando a saída[/b]

‘-i’
‘-y’
‘--ignore-case’ Ignora a diferença entre maiúsculas e minúsculas.

‘--color[=[i]QUANDO[/i]]’
‘--colour[=[i]QUANDO[/i]]’
Exibe a parte que combinou com uma cor diferente. OBS.: várias distros já tem um alias e não é necessário digitar esta opção todas as vezes.
[i]QUANDO[/i] é ‘never’, ‘always’ ou ‘auto’

‘-c’
‘--count’ Suprime a saída normal e exibe a contagem de linhas.

Exemplo: contar quantas vezes a palavra tutorial aparece no arquivo
[code]$ grep -c 'tutorial' arquivo[/code]

‘-o’
‘--only-matching’ Exibe apenas a parte que combinou com a string e não a linha toda.

Exemplo: extrair email de um arquivo CSV
[code]$ grep -o '[email protected]' arquivo.csv[/code]

‘-n’
‘--line-number’ Mostra o número da linha antes do resultado.

‘-C [i]número[/i]’
‘-num’
‘--context=[i]número[/i]’ Exibe a quantidade [i]número[/i] de linhas antes e depois do resultado.

Exemplo: Você precisa localizar a palavra ‘else’ e ver as 2 linhas antes e depois
[code]$ grep -C 2 'else' arquivo[/code]

‘-v’
‘--invert-match’ Inverte o sentido do resultado, ou seja, exibe as linhas que não combinaram.

‘-R’
‘--dereference-recursive’ Para cada diretório, ler e processar todos os arquivos recursivamente e seguir todos os links simbólicos.

Exemplo: Você não sabe qual arquivo contém a string.
[code]$ grep -R 'tutorial'[/code]

‘-w’
‘--word-regexp’ Seleciona apenas linhas que contém resultados que formam palavras inteiras, ou seja, o teste é executado e a string deve estar no começo da linha, precedida de um caractere que não constitui palavra. De maneira similar, ele deve estar ou no final da linha ou seguida de um caractere que não constitui palavra. Caracteres que constituem palavras são letras, dígitos e underline.

[b]Escapando caracteres especiais ' " * [ ] ^ $ - .[/b]
Às vezes queremos buscar por um caractere especial e pra isso a barra invertida vai informar o grep que o próximo caractere é para ser considerado literal. Mas atenção usar a barra invertida com certos caracteres comuns os tornam caracteres especiais. Não vamos tratar deles aqui neste tutorial.
[code]$ grep ''' arquivo[/code]
Não funciona. Tente você mesmo.

Corretos:
$ grep \' arquivo
$ grep '"' arquivo
$ grep "'" arquivo
$ grep 'tutorial\*' arquivo
$ grep '\[' arquivo
$ grep '\^' arquivo
$ grep '\$' arquivo
$ grep -e '-' arquivo
$ grep '\.' arquivo

[b]Extra: Interagindo de maneira divertida[/b]
[code]$ grep 'tutorial' -[/code]
O traço indica que o grep deve ler da entrada padrão. Comece a digitar algumas coisas e pressione enter.
Digite tutorial e veja o que acontece. Digite testandotutorial e brinque um pouco. Aperte ctrl + c para terminar.

Comentários

Entre ou Registre-se para fazer um comentário.