Estou procurando um padrão grep para encontrar ocorrências de uma palavra em algum código (Python, se for importante).
Quero ignorar ocorrências que estejam dentro de uma palavra mais longa, dentro de strings ou dentro de comentários (se possível).
Então, se eu tivesse este código Python:
Variable = 5
print(Variable)
MyVariablePlusOne = 6
description = "This is Variable"
# I love Variable
Eu quero uma maneira de fazer grep Variable
que corresponda apenas às duas primeiras linhas.
Usando qualquer awk POSIX, dada apenas a entrada de exemplo que você forneceu (não tentarei adivinhar quais outras combinações de estruturas de código você pode ter):
O texto acima pressupõe que por "palavra" você se refere a qualquer sequência de caracteres alfanuméricos ou
_
caracteres, massageie o regexp para se adequar se estiver errado.Com o GNU awk para limites de palavras você pode usar
/\<Variable\>/
em vez de/(^|[^[:alnum:]_])Variable([^[:alnum:]_]|$)/
.Não consigo pensar em uma maneira de fazer isso com segurança, principalmente sem excluir a menção ao nome da variável em strings e principalmente quando o código é python, portanto, há muitas maneiras de ter uma "string". Considerar:
mas também
e assim por diante. No entanto, a premissa principal aqui parece ser "encontre a string
Variable
no meu arquivo de texto, mas somente se ela estiver no início da linha ou precedida por um caractere que não seja espaço em branco e não alfanumérico". Nesse caso, este deve ser um bom começo:A regex procura o início da string
^
ou (|
) qualquer caractere que não esteja na classe de caracteres (^[ ]
). A classe dada é\s
(espaço em branco) e\w
(alfanumérico e-
). O resultado procura todas as ocorrênciasVariable
que são precedidas pelo início da linha ou por um caractere que não seja um espaço em branco e não seja uma palavra.Você poderia estender isso para evitar todas as linhas cujo primeiro caractere sem espaço seja um
#
with:Mas isso realmente servirá apenas como ponto de partida para sua revisão manual posterior.