Compreender o comando grep com exemplos práticos para filtrar e exibir facilmente o conteúdo do arquivo
GREP
significa 'Impressão de expressão regular global'. É um utilitário de linha de comando útil fornecido pelo Linux, para pesquisar a linha de texto que corresponde ao padrão fornecido pelo usuário.
grep
recebe a entrada do usuário na forma de strings ou palavras que o usuário deseja pesquisar em um arquivo específico. O comando então verifica o arquivo especificado pelo usuário para este padrão e retorna as linhas que correspondem ao padrão fornecido.
Ele faz um excelente trabalho ao filtrar o conteúdo de um arquivo, tornando mais fácil nossa tarefa de pesquisar um conteúdo específico em um ou vários arquivos simultaneamente.
Neste artigo, vamos revisar o funcionamento do grep
comando com alguns exemplos práticos em detalhes.
Opções disponíveis com grep
comando
Estas são algumas das opções fundamentais que você usará freqüentemente com o grep
comando.
Opção |
Descrição |
-i |
Para uma pesquisa que não diferencia maiúsculas de minúsculas |
-r |
Para pesquisar recursivamente por todos os arquivos no diretório especificado e seus subdiretórios |
-c |
Para exibir o número total de vezes que uma string aparece |
-v |
Para exibir as linhas não correspondentes |
-w |
Filtro para aquela palavra particular usada separadamente |
Usando o grep
comando
grep
O comando geralmente é usado com o |
utilitário pipe ( ). Ele pode ser implementado com o tubo de shell quando você quiser usá-lo com alguns outros comandos do Linux. Embora, grep
também possa ser usado individualmente sem o |
utilitário pipe ( ).
Vejamos algumas das sintaxes básicas do grep
comando com e sem o utilitário pipe.
Deixe-me mostrar primeiro o arquivo de texto de amostra que usarei para ilustrar o grep
comando.
INDIA IS A BEAUTIFUL COUNTRY OF PEACE LOVING PEOPLE.
india stands on three pillars of legislature, executive and judiciary.
India Is a Beautiful Country Of Peace Loving People.
India cares for the people as it's resource
cartesian coordinates
importance of all th cartesian coordinates.
Following are two empty lines.
use of a bullock cart is a common sight in the village for the agrarian chores.
This is the end of the sample file.
grep
usado com o utilitário pipe (|)
grep
O comando pode ser implementado junto com outros comandos do Linux usando os canais do shell. Por exemplo, usando o cat
comando para exibir o conteúdo do arquivo, mas ao mesmo tempo canalizando a saída usando o grep
comando para exibir apenas o conteúdo que você deseja ver. Isso ficará mais claro quando examinarmos o exemplo.
Sintaxe :
[command] | grep [string]
Exemplo :
cat sample.txt | grep legislature
Aqui, usei o cat
comando para exibir algumas linhas do arquivo 'sample.txt'. Apenas as linhas que contêm a palavra 'legislatura' devem ser exibidas e ignorar o resto das linhas.
Produto :
[email protected]:~/workspace$ cat sample.txt | grep legislature
india stands on three pillars of legislature, executive and judiciary.
[email protected]:~/workspace$
grep
usado sem utilitário de pipe (|)
grep
pode ser usado diretamente como um comando individual sem usar o |
utilitário pipe ( ).
Sintaxe :
grep [string_to_be_searched] [filename]
Exemplo :
grep India sample.txt
Produto :
India Is a Beautiful Country Of Peace Loving People.
India cares for the people as it's resource
Portanto, usei o grep
comando diretamente para filtrar as linhas que contêm a string 'Índia' do arquivo de texto 'amostra.txt'.
Pesquisa que não diferencia maiúsculas de minúsculas usando o grep
comando
O Linux é muito cauteloso quanto à diferenciação de maiúsculas e minúsculas quando disparamos os comandos no terminal. Isso requer que o usuário tome cuidado com a caixa da string colocada no comando.
Vamos ver isso por meio de um exemplo.
grep peace sample.txt
Nesse caso, não obteremos uma saída, pois não existe uma palavra como 'paz' no arquivo de amostra. Temos a palavra 'Paz' com 'P' maiúsculo. A palavra é a mesma, mas quando usamos o grep
comando sem nenhuma opção, ele procura a correspondência exata no arquivo, desconsiderando qualquer alteração na caixa das letras.
Para evitar essa ambigüidade, você pode simplesmente usar a -i
opção que diz literalmente o grep
comando “esqueça o caso em que coloquei a string e apenas pesquise todos os padrões correspondentes no arquivo”.
Sintaxe:
grep -i [string] [filename]
Exemplo :
grep -i peace sample.txt
Produto :
INDIA IS A BEAUTIFUL COUNTRY OF PEACE LOVING PEOPLE.
India Is a Beautiful Country Of Peace Loving People.
Todas as linhas correspondentes são exibidas independentemente do caso em que a string correspondente é.
Pesquisa recursiva usando grep
comando
A -r
opção pesquisará todos os arquivos em um diretório e todos os seus subdiretórios que correspondam ao padrão de string fornecido pelo usuário no comando.
Sintaxe :
grep -i -r [string] [file_path]
Exemplo :
grep -i -r tomcat /home/gaurav/workspace
A string aqui é 'tomcat' e será pesquisada na área de trabalho do diretório. Todos os subdiretórios e arquivos no diretório 'espaço de trabalho' também serão verificados para corresponder ao padrão de string fornecido.
Produto :
./context_log.policy:// catalina.policy - Security Policy Permissions for Tomcat 7
./context_log.policy:// Note: If tomcat-juli.jar is in ${catalina.base} and not in ${catalina.home},
./context_log.policy:// grant codeBase "file:${catalina.base}/bin/tomcat-juli.jar" {..}
./context_log.policy:grant codeBase "file:${catalina.home}/bin/tomcat-juli.jar" {
./context_log.policy: permission java.lang.RuntimePermission "accessClassInPackage.org.apache.tomcat.websocket.server";
./context.xml:
./catalina.properties:# - Tomcat Bootstrap JARs
./catalina.properties:# - Tomcat API JARs
./catalina.properties:# - Tomcat JARs
./catalina.properties:# - Common non-Tomcat JARs
./catalina.properties:org.apache.catalina.startup.TldConfig.jarsToSkip=tomcat7-websocket.jar
./catalina.properties:tomcat.util.buf.StringCache.byte.enabled=true
./catalina.properties:#tomcat.util.buf.StringCache.char.enabled=true
./catalina.properties:#tomcat.util.buf.StringCache.trainThreshold=500000
./catalina.properties:#tomcat.util.buf.StringCache.cacheSize=5000
./server.xml: pathname="conf/tomcat-users.xml" />
./server.xml:
./tomcat-users.xml:
./tomcat-users.xml:
./web.xml:
./web.xml:
NOTA : Ao usar a -r
opção com o grep
comando, precisamos fornecer o caminho do arquivo e não o nome do arquivo
Pesquisando palavras inteiras apenas com grep
comando
Muitas vezes, você estará procurando por uma palavra, mas acabará preenchendo seu terminal com as linhas correspondentes que contêm a palavra correspondente, mas não como uma palavra individual. Você pode ver as linhas que contêm algumas palavras cuja subparte é a string que você inseriu.
Ficou confuso com isso? Não se preocupe, é muito mais fácil entender depois que você pegar o exemplo.
Exemplo :
Aqui, desejo pesquisar uma palavra individual 'carrinho' e exibir todas as linhas que correspondem a essa palavra no arquivo 'amostra.txt'.
grep -i cart sample.txt
Produto :
Cartesian coordinates
importance of all the Cartesian coordinates.
use of a bullock cart is a common sight in the village for the agrarian chores
The cart went missing as the boy left it loose.
Na saída, você pode observar que a palavra 'cartesiano' também contém a palavra 'carrinho' e, portanto, as linhas contendo a palavra 'cartesiano' também são exibidas, embora não desejemos que sejam exibidas.
Você pode usar a -w
opção com o grep
comando para resolver essa ambigüidade.
Sintaxe :
grep -i -w [string] [filename]
Exemplo :
grep -i -w cart sample.txt
Produto :
use of a bullock cart is a common sight in the village for the agrarian chores.
The cart went missing as the boy left it loose.
Agora, quando tiver usado a w
opção -, grep
você obterá apenas as linhas em que a palavra 'carrinho' é usada como um todo.
Pesquisa invertida usando o grep
comando
grep
comando também pode ser usado de forma reversa. Podemos usar o grep
comando de forma oposta, ocultando as linhas correspondentes e exibindo apenas as linhas onde a correspondência não foi encontrada. Você pode fazer isso usando a -v
opção com o grep
comando.
Sintaxe :
grep -i -v [string] [filename]
Exemplo :
grep -i -v resource sample.txt
Produto :
INDIA IS A BEAUTIFUL COUNTRY OF PEACE LOVING PEOPLE.
india stands on three pillars of legislature, executive and judiciary.
India Is a Beautiful Country Of Peace Loving People.
cartesian coordinates
importance of all th cartesian coordinates.
use of a bullock cart is a common sight in the village for the agrarian chores.
This is the end of the sample file.
Na saída, todas as outras linhas são exibidas, exceto a linha que contém a palavra 'recurso'.
Contando ocorrências de string correspondente
A saída do grep
comando geralmente é muito longa se os dados no arquivo forem extensos. Quanto mais correspondências, mais longas são as saídas do grep
comando. O Linux oferece uma opção onde você pode exibir o número de ocorrências da correspondência.
Sintaxe :
grep -i -c [string] [filename]
Exemplo :
grep -i -c india sample.txt
Produto :
[email protected]:~/workspace$ grep -i -c india sample.txt
4
[email protected]:~/workspace$
Aqui, a saída é um número que é o número de ocorrências da palavra 'Índia' no arquivo sample.txt.
NOTA : Eu usei a -i
opção em todos os exemplos apenas para ficar seguro com o problema de distinção entre maiúsculas e minúsculas. Caso você tenha certeza da caixa da palavra que está procurando, pode omitir a -i
opção com segurança .
Conclusão
Aprendemos os usos fundamentais do grep
comando nos sistemas Linux neste tutorial. Também aprendemos a exibir diversos conteúdos que melhor atendem às nossas necessidades e a não sobrecarregar o terminal com muitas linhas. grep
O comando certamente economizará tempo se for usado para escanear grandes conjuntos de dados.