Grep em estruturas de diretório específicas

1

O que estou tentando realizar:

Procure a expressão regular \b\$\w+ em todos os arquivos .php que se enquadram nessa estrutura de diretório:

foo/templates/*.php
bar/templates/*.php
<something>/templates/*.php

Edit: Eu devo afirmar que meu objetivo de nível mais alto é encontrar variáveis PHP exclusivas dentro dos arquivos

O que eu tentei:

grep '\b\$\w+' **/templates/*.php
grep '\b\$\w+' */templates/*.php
grep '\b\$\w+' **/templates/**.php

Nenhum deles parece produzir os resultados esperados. Qual é a sintaxe correta para fazer isso?

Além disso, seria interessante "agrupar por" ou "selecionar distinto" (portanto, por exemplo, $_GET seria exibido apenas uma vez, mesmo que haja 180 instâncias no arquivo), se isso for possível.

Eu já li essas respostas, o que me levou a experimentar os comandos acima:

por rink.attendant.6 14.09.2014 / 06:26

1 resposta

1

Tente:

grep -oE '\$\w+' */templates/*.php | sort -u

Notas:

  • A opção -o informa grep para imprimir apenas as partes correspondentes da linha, não a linha inteira. Isso deve dar a você os nomes de todas as variáveis de $ .

  • sort -u classifica e remove as duplicatas para que cada nome de variável apareça na saída apenas uma vez.

  • A construção \w que você estava usando requer regex estendida. Portanto, a opção -E foi adicionada.

  • O uso de \b para limites de palavras é problemático aqui porque $ não é um caractere de "palavra" válido e, portanto, não inicia uma palavra como \b o entenderia. Portanto, \b corresponderia apenas se uma palavra acabasse logo antes do $ , como em a$b , mas não de a $b . \b foi removido do código acima.

por 14.09.2014 / 07:14