Grep su strutture di directory specifiche


1

Cosa sto cercando di realizzare:

Cerca l'espressione regolare \b\$\w+in tutti i .phpfile che rientrano in questa struttura di directory:

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

Modifica: dovrei affermare che il mio obiettivo di livello superiore è trovare variabili PHP uniche all'interno dei file

Cosa ho provato:

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

Nessuno di loro sembra produrre i risultati previsti. Qual è la sintassi corretta per fare questo?

Inoltre sarebbe bello "raggruppare per" o "selezionare distinti" (quindi, per esempio, $_GETverrebbero visualizzati una sola volta anche se ci sono 180 istanze nel file) se ciò è possibile.


Ho già letto queste risposte che mi hanno portato a provare i comandi sopra:

Risposte:


1

Provare:

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

Gli appunti:

  • L' -oopzione dice grepdi stampare solo le parti corrispondenti della linea, non l'intera linea. Questo dovrebbe darti i nomi di tutte le $variabili di stile.

  • sort -u ordina e rimuove i duplicati in modo che ciascun nome di variabile venga visualizzato nell'output una sola volta.

  • Il \wcostrutto che stavi usando richiede regex esteso. Pertanto, è -Estata aggiunta l' opzione.

  • L'uso di \bper i confini delle parole è problematico qui perché $non è un carattere "parola" valido e quindi non inizia una parola come la \bcomprenderebbe. Pertanto, \bcorrisponderebbe solo se una parola fosse terminata poco prima del $come in a$bma non a $b. \bè stato rimosso dal codice sopra.


Ti capita di sapere in quale pacchetto sortè presente, così posso installarlo tramite apt-get? Sto usando Linux Mint
rink.attendant.6

@ rink.attendant.6 Mint fa parte della famiglia Debian. Su Debian, /usr/bin/sortè dentro coreutils. Quindi usa: apt-get install coreutils. coreutils, essendo le utility di base, tuttavia, in realtà dovrebbe essere installato per impostazione predefinita. Come dice su LinuxMint.com : "Questo pacchetto contiene le utilità di base per la manipolazione di file, shell e testo che dovrebbero esistere su ogni sistema operativo."
Giovanni 1024
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.