GREP - encontrando todas as ocorrências de uma string
-
21-09-2019 - |
Pergunta
Tenho a tarefa de rotular um aplicativo em branco para que ele não contenha referências à nossa empresa, site, etc.O problema que estou enfrentando é que tenho muitos padrões diferentes para procurar e gostaria de garantir que todos os padrões sejam removidos.Como a aplicação não foi desenvolvida internamente (inteiramente), não podemos simplesmente procurar ocorrências em messages.properties e pronto.Devemos passar por JSP's, código Java e xml.
Estou usando o grep para filtrar resultados como este:
grep SOME_PATTERN . -ir | grep -v import | grep -v // | grep -v /* ...
Os padrões escapam quando os uso na linha de comando;no entanto, não acho que essa correspondência de padrões seja muito robusta.Pode haver ocorrências que importem (improvável) ou mesmo /* (o início de um comentário javadoc).
Toda a saída de texto para a tela deve vir de uma declaração de string em algum lugar ou de um arquivo de constantes.Então, posso assumir que encontrarei algo como:
public static final String SOME_CONSTANT = "SOME_PATTERN is currently unavailable";
Gostaria de encontrar essa ocorrência, bem como:
public static final String SOME_CONSTANT = "
SOME_PATTERN blah blah blah";
Alternativamente, se tivéssemos um rastreador interno/testes automatizados, eu poderia simplesmente extrair o xhtml de cada página e verificar a fonte para garantir que estava limpa.
Solução
eu usaria sed, não grep! O SED é usado para executar transformações básicas de texto em um fluxo de entrada. Tentar s/regexp/replacement/
opção com comando sed.
Você também pode tentar Awk comando. Tem uma opção -F Para a separação dos campos, você pode usá -lo com ; para separar linhas de seus arquivos com ;.
A melhor solução será, no entanto, um script simples em Perl ou em Pitão.
Outras dicas
Para resolver sua preocupação com a falta de algumas ocorrências, por que não filtrar progressivamente:
- Crie um arquivo de texto com todos os possíveis como ponto de partida.
- Use o filtro X (grep para '^import', por exemplo) para despejar prováveis falsos positivos em um arquivo tmp.
- Use o filtro X novamente para removê-los correspondências do seu arquivo de trabalho (a cópia de [1]).
- Faça uma rápida passagem visual do tmp arquivar e adicionar quaisquer correspondências reais de volta em.
- Repita [2]-[4] com outros filtros.
Isso pode levar algum tempo, é claro, mas não parece que isso seja algo que você queira errar...