grep

Encontrar strings em arquivos de texto usando grep com expressão regular

Encontrar strings em arquivos de texto usando grep com expressão regular
grep é uma das ferramentas mais populares para pesquisar e encontrar strings em um arquivo de texto. O nome 'grep' deriva de um comando na agora obsoleta ferramenta do editor de linha do Unix ed - o comando ed para pesquisar globalmente através de um arquivo para um expressão regular e depois impressão essas linhas eram g / re / p, onde re era a expressão regular que você usaria. Eventualmente, o comando grep foi escrito para fazer esta pesquisa em um arquivo quando não estava usando ed.

Neste artigo, mostramos como executar a pesquisa de string avançada usando Grep com expressão regular, dando a você 10 exemplos práticos em suas implementações. Muitos exemplos discutidos neste artigo têm implicações práticas, o que significa que você pode usá-los em sua programação Linux diária. Os exemplos a seguir descrevem alguns exemplos de regexp para padrões comumente pesquisados.

Ex 1: Encontre um único Afretador em um arquivo de texto

Para gerar linhas no arquivo 'livro' que contenham um caractere '$', digite:

livro $ grep '\ $'

Ex 2: Encontre uma única string em um arquivo de texto

Para gerar linhas no arquivo 'livro' que contém a string '$ 14.99 ', digite:

$ grep '\ $ 14 \.Livro 99

Ex 3: Encontre um único Afretador especial em um arquivo de texto

Para gerar linhas no arquivo 'livro' que contenham um caractere '\', digite:

livro $ grep '\\'

Ex 4: Linhas correspondentes que começam com determinado texto

Use 'ˆ' em uma expressão regular para denotar o início de uma linha.

Para imprimir todas as linhas em '/ usr / dict / words' começando com 'pro', digite:

$ grep 'ˆpro' / usr / dict / words

Para imprimir todas as linhas no arquivo 'livro' que começam com o texto 'no início', independentemente do caso, digite:

livro $ grep -i 'ˆno início'

NOTA: Essas expressões regulares foram citadas com 'caracteres; isso ocorre porque alguns shells tratam o caractere 'ˆ' como um “metacaractere” especial

Além das pesquisas de palavras e frases, você pode usar o grep para pesquisar padrões de texto complexos chamados de expressões regulares. Uma expressão regular - ou “regexp” - é uma string de texto de caracteres especiais que especifica um definir de padrões para combinar.

Tecnicamente falando, os padrões de palavras ou frases são expressões regulares - apenas expressões muito simples. Em uma expressão regular, a maioria dos caracteres, incluindo letras e números, representam a si mesmos. Por exemplo, o padrão regexp 1 corresponde à string '1', e o padrão Garoto corresponde à string 'menino'.

Existem vários caracteres reservados chamados metacaracteres que não se representam em uma expressão regular, mas têm um significado especial que é usado para construir padrões complexos. Esses metacaracteres são os seguintes: ., *, [, ], ˆ, $ e \. É bom notar que tais metacaracteres são comuns entre quase todas as distribuições Linux comuns e especiais. Aqui está um bom artigo que cobre significados especiais dos metacaracteres e dá exemplos de seu uso.

Ex 5: Linhas correspondentes que terminam com determinado texto

Use '$' como o último caractere do texto citado para corresponder a esse texto apenas no final de uma linha. Para gerar linhas no arquivo 'indo' terminando com um ponto de exclamação, digite:

$ grep '!$ 'indo

Ex 6: Linhas correspondentes de um determinado comprimento

Para combinar linhas de um comprimento específico, use aquele número de '.'caracteres entre' ˆ 'e' $ '- por exemplo, para corresponder a todas as linhas com dois caracteres (ou colunas) de largura, use' ˆ ... $ 'como o regexp para pesquisar.

Para imprimir todas as linhas em '/ usr / dict / words' com exatamente três caracteres de largura, digite:

$ grep 'ˆ… $' / usr / dict / words

Para linhas mais longas, é mais útil usar uma construção diferente: 'ˆ.\ número \ $ ', onde número é o número de linhas para combinar. Use ',' para especificar um intervalo de números.

Para imprimir todas as linhas em '/ usr / dict / words' com exatamente doze caracteres de largura, digite:

$ grep 'ˆ.\ 12 \ $ '/ usr / dict / words

Para imprimir todas as linhas em '/ usr / dict / words' com vinte e dois ou mais caracteres de largura, digite:

$ grep 'ˆ.\ 22, \ $ '/ usr / dict / words

Ex 7: Linhas correspondentes que contêm qualquer uma das expressões regulares

Para combinar linhas que contenham qualquer um de um número de regexps, especifique cada um dos regexps para pesquisar entre os operadores de alternância ('\ |') como o regexp para pesquisar. Linhas contendo qualquer uma das expressões regulares fornecidas serão geradas.

Para produzir todas as linhas em 'playboy' que contenham os padrões 'o livro' ou 'bolo', digite:

$ grep 'o livro \ | bolo' playboy

Ex 8: Linhas correspondentes que contêm todas as expressões regulares

Para produzir linhas que correspondam tudo de uma série de regexps, use grep para gerar linhas contendo a primeira regexp que você deseja corresponder e canalizar a saída para um grep com a segunda regexp como um argumento. Continue adicionando tubos para pesquisas grep para todas as expressões regulares que você deseja pesquisar.

Para produzir todas as linhas na 'lista de reprodução' que contém os padrões 'costa' e 'céu', independentemente do caso, digite:

Lista de reprodução $ grep -i 'the shore' | grep -i sky

Ex 9: Linhas correspondentes que contêm apenas alguns caracteres

Para combinar linhas que contenham apenas determinados caracteres, use a expressão regular 'ˆ [caracteres] * $', onde os caracteres são os únicos a corresponder.  Para produzir linhas em '/ usr / dict / words' que contêm apenas vogais, digite:

$ grep -i 'ˆ [aeiou] * $' / usr / dict / words

A opção '-i' corresponde a caracteres independentemente da caixa; então, neste exemplo, todos os caracteres de vogal são correspondidos, independentemente do caso.

Ex 10: Encontrando frases independentemente do espaçamento

Uma maneira de pesquisar uma frase que pode ocorrer com espaços extras entre as palavras, ou através de uma linha ou quebra de página, é remover todos os avanços de linha e espaços extras da entrada e, em seguida, executar o grep. Para fazer isso, canalize a entrada para tr com "\ r \ n: \> \ | -" como um argumento para a opção '-d' (removendo todas as quebras de linha da entrada); canalize isso para o filtro fmt com a opção '-u' (saída do texto com espaçamento uniforme); e canalize isso para grep com o padrão para pesquisar.

Para pesquisar as quebras de linha para a string 'ao mesmo tempo que' no arquivo 'docs', digite:

$ cat docs | tr -d '\ r \ n: \> \ |
-'| fmt -u | grep 'ao mesmo tempo que'

Resumo

Neste artigo, revisamos 10 exemplos práticos de uso do comando Grep Linux para pesquisar e encontrar strings em um arquivo de texto. Ao longo do caminho, aprendemos como usar expressões regulares em conjunto com Grep para realizar pesquisas complexas em arquivos de texto. Agora você tem uma ideia melhor de quão poderosas são as funções de pesquisa do Linux.

Aqui estão recursos adicionais para aqueles interessados ​​em aprender mais sobre a programação do Linux:

Recursos para administradores de sistema

Recursos para programadores de kernel do Linux

Dicionário do sistema de arquivos Linux

Revisão abrangente de como funciona o sistema de arquivos e diretórios do Linux

Tutorial de Battle for Wesnoth
The Battle for Wesnoth é um dos jogos de estratégia de código aberto mais populares que você pode jogar no momento. Este jogo não está apenas em desen...
0 A.D. Tutorial
Dos muitos jogos de estratégia que existem, 0 A.D. consegue se destacar como um título abrangente e um jogo muito profundo e tático, apesar de ser de ...
Tutorial Unity3D
Introdução ao Unity 3D Unity 3D é um poderoso motor de desenvolvimento de jogos. É uma plataforma cruzada que permite criar jogos para celular, web, d...