Como pesquisar um arquivo de texto para um inteiro específico

2

Existe uma maneira simples de pesquisar um arquivo de texto (código fonte) para todas as instâncias de um inteiro específico. Isso não deve ser acionado em números maiores que incluem o inteiro como uma subcadeia, mas não pode simplesmente excluir essas linhas, pois elas podem conter os dois casos:

pesquisando por '6' ...

int a=6; // found
int b=16; // not found (despite the '6' in '16')
int c=6, d=16; // found

Estou realmente procurando uma abordagem de linha de comando para isso, mas também estou curioso para saber se existe um FOSS     

por nobar 22.06.2016 / 22:24

3 respostas

6

grep -E '\b6\b'

\b é um "limite de palavras"

Editar: Depois de apontar @nobar na direção correta, ele encontrou / apontou a opção de atalho -w (palavra-regexp) na manpage, o que simplifica o acima para:

grep -w 6

Se usado muito, você poderia usar uma função similar a

wgrp(){ grep -w "$1" "$2"; }

Nota (para @glenn-jackman): Se você não citar "$2" aqui, você pode usar a função como um filtro de pipeline. Mas sim, então não funcionará com nomes de arquivos com espaços.

Depois de ler mais uma ótima resposta do @Gilles, agora proponho

igrp(){ grep -E "(^|[^0-9])$1($|[^0-9])" "$2"; }

    
por 22.06.2016 / 22:34
3

Você pode procurar um número inteiro específico com uma expressão regular. Pesquise os dígitos precedidos pelo início dos dados ou por um caractere não digitalizado, e também após os dígitos.

grep -e '^6$' -e '^6[^0-9]' -e '[^0-9]6$' -e '[^0-9]6[^0-9]'   # BRE syntax
grep -E '(^|[^0-9])6($|[^0-9])'                                # ERE syntax

Uma pesquisa de palavras inteiras, como sugerido em outras respostas, falha em hits como foo6bar . (Isso pode não ser um problema para o seu caso de uso, mas é o que você pediu.)

Qualquer editor ou visualizador de texto incompleto (por exemplo, less ) tem uma pesquisa de expressão regular. Verifique sua documentação para ver qual sintaxe de regex ele usa.

    
por 23.06.2016 / 01:59
1

Eu acho que isso não era uma necessidade tão obscura. Meu editor de programação regular, pluma , suporta isto através da caixa de diálogo "find" usando a opção "Match whole word only" . Tenho certeza que muitos outros editores também têm isso - embora no momento, aparentemente não o ancestral do pluma, gedit .

    
por 22.06.2016 / 23:08