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

Encontrando 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 ferramenta de editor de linha de linha ed-obsoleta do UNIX ED-o comando ed para pesquisa globalmente através de um arquivo para um expressão regular e então 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 essa pesquisa em um arquivo quando não está usando Ed.

Neste artigo, mostramos que você executa a pesquisa de strings antecipada 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 diária do Linux. As amostras a seguir descrevem alguns exemplos regexp para padrões comumente pesquisados.

Ex 1: encontre um único fretador em um arquivo de texto

Para produzir linhas de saída no arquivo 'livro' que contêm um caractere '$', tipo:

$ GREP '\ $' livro

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

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

$ grep '\ $ 14 \.99 'Livro

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

Para produzir linhas no arquivo 'livro' que contêm um caractere '\', digite:

$ GREP '\\' LIVRO

Ex 4: linhas correspondentes começando com determinado texto

Use 'ˆ' em um regexp para denotar o início de uma linha.

Para produzir todas as linhas em '/usr/dict/palavras' começando com 'pro', tipo:

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

Para produzir todas as linhas no arquivo 'livro' que começa com o texto 'no começo', independentemente do caso, tipo:

$ grep -i 'ˆ no começo' Livro

OBSERVAÇÃO: Esses regexps foram citados com os personagens; Isso ocorre porque algumas conchas tratam o personagem 'ˆ' como um "metacaracter" especial

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

Tecnicamente falando, a palavra ou padrões de frase são expressões regulares-apenas muito simples. Em uma expressão regular, a maioria dos personagens-incluindo cartas e números se representam. Por exemplo, o padrão regexp 1 corresponde à string '1' e ao padrão garoto combina com a corda 'menino'.

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

Ex 5: linhas correspondentes terminando com determinado texto

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

$ grep '!$ 'indo

Ex 6: linhas correspondentes de um certo comprimento

Para combinar com as linhas de um comprimento específico, use esse número de '.'Personagens entre' ˆ 'e' $ '- por exemplo, para combinar com todas as linhas que têm dois caracteres (ou colunas) de largura, use' ˆ… $ 'como o regexp para procurar por.

Para produzir todas as linhas em '/usr/dict/words' que têm exatamente três caracteres de largura, tipo:

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

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

Para produzir todas as linhas em '/usr/dict/words' que têm exatamente doze caracteres de largura, tipo:

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

Para produzir todas as linhas em '/usr/dict/words' com vinte e dois caracteres de largura, tipo:

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

Ex 7: linhas correspondentes que contêm qualquer um de alguns regexps

Para combinar linhas que contêm qualquer um de vários regexps, especifique cada um dos regexps para pesquisar entre operadores de alternância ('\ |') como o regexp para pesquisar. Linhas que contêm qualquer um dos regexps fornecidos serão emitidos.

Para produzir todas as linhas em 'playboy' que contém os padrões 'o livro' ou 'bolo', tipo:

$ grep 'o livro \ | bolo' playboy

Ex 8: linhas correspondentes que contêm todos os regexps

Para obter linhas de saída que correspondem todos De vários regexps, use o Grep para obter linhas de saída contendo o primeiro regexp que você deseja combinar e coloque a saída para um grep com o segundo regexp como argumento. Continue adicionando tubos às pesquisas de Grep por todos os regexps que você deseja pesquisar.

Para produzir todas as linhas na 'Lista de reprodução' que contém ambos os padrões 'The Shore' e 'Sky', independentemente do caso, tipo:

$ GREP -I 'The Shore' Lista de reprodução | Grep -i Sky

Ex 9: linhas correspondentes que contêm apenas certos caracteres

Para combinar com linhas que contêm apenas certos caracteres, use o regexp 'ˆ [caracteres]*$', onde os personagens são os que combinam. Para produzir linhas em '/usr/dict/palavras' que contêm apenas vogais, digite:

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

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

Ex 10: Encontrar frases, independentemente do espaçamento

Uma maneira de procurar uma frase que possa ocorrer com espaços extras entre as palavras, ou através de uma quebra de linha ou página, é remover todos os feeds de linha e espaços extras da entrada e depois grep que. Para fazer isso, pague a entrada para TR com "\ r \ n: \> \ |-" como um argumento para a opção '-d' (removendo todas as quebras de linha da entrada); tubá-lo no filtro FMT com a opção '-u' (emitindo o texto com espaçamento uniforme); e pague isso para grep com o padrão para procurar.

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 usar o comando Grep Linux para pesquisar e encontrar strings em um arquivo de texto. Ao longo do caminho, aprendemos a usar expressões regulares em conjunto com o Grep para realizar pesquisas complexas nos arquivos de texto. Até agora você tem uma idéia melhor sobre como as poderosas funções de pesquisa do Linux são.

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

Recursos para administradores de sistema

  • Guia de administrador do sistema Linux- o que é o sistema operacional Linux e como funciona
  • Guia de administrador do sistema Linux- Visão geral da memória virtual do Linux e do buffer de disco cache
  • Linux System Admin Guide- Melhores práticas para monitorar sistemas Linux
  • Linux System Admin Guide- Melhores práticas para realizar botas e desligamentos Linux
  • Linux System Admin Guide- Melhores práticas para fazer e gerenciar operações de backup

Recursos para programadores de kernel Linux

  • Como funciona o gerenciamento de memória do sistema operacional Linux
  • Revisão abrangente dos processos do sistema operacional do kernel Linux
  • O que são mecanismos por trás do gerenciamento de tarefas do kernel Linux
Dicionário do sistema de arquivos Linux

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