In bash voglio restituire il nome del file (e il percorso del file) per ogni file di tipo .php|.html|.jscontenente la stringa senza distinzione tra maiuscole e minuscole"document.cookie" | "setcookie"
Come potrei farlo?
In bash voglio restituire il nome del file (e il percorso del file) per ogni file di tipo .php|.html|.jscontenente la stringa senza distinzione tra maiuscole e minuscole"document.cookie" | "setcookie"
Come potrei farlo?
Risposte:
egrep -ir --include=*.{php,html,js} "(document.cookie|setcookie)" .
La rbandiera significa cercare ricorsivamente (cercare sottodirectory). La ibandiera indica la distinzione tra maiuscole e minuscole.
Se vuoi solo i nomi dei file aggiungi il flag l(minuscolo L):
egrep -lir --include=*.{php,html,js} "(document.cookie|setcookie)" .
grep -E ... >egrep ...
grep: (error|fail): No such file or directorysu Ubuntu Desktop 16; qualche suggerimento?
--include=\*.{php,html,js}
Prova qualcosa del genere grep -r -n -i --include="*.html *.php *.js" searchstrinhere .
lo -irende insensibile
l' .ai mezzi finali si desidera avviare dalla directory corrente, questo potrebbe essere sostituito con qualsiasi directory.
i -rmezzi lo fanno ricorsivamente, proprio sotto l'albero delle directory
la -nstampa il numero di riga per le partite.
il --includeconsente di aggiungere i nomi dei file, le estensioni. Carte jolly accettate
Per maggiori informazioni, consultare: http://www.gnu.org/software/grep/
-lopzione (basta stampare i nomi dei file che corrispondono) invece di-n
findloro e grepper la stringa:
Questo troverà tutti i file dei tuoi 3 tipi in / partenza / percorso e grep per l'espressione regolare '(document\.cookie|setcookie)'. Dividi su 2 righe con la barra rovesciata solo per leggibilità ...
find /starting/path -type f -name "*.php" -o -name "*.html" -o -name "*.js" | \
xargs egrep -i '(document\.cookie|setcookie)'
-exec grep -l 'sth' {} \;
# egrep -ir --include=file.foo "(foo|bar)" /dirnella directory weigth ~ 500Gb.
Sembra un lavoro perfetto per grepo forse ack
O questa meravigliosa costruzione:
find . -type f \( -name *.php -o -name *.html -o -name *.js \) -exec grep "document.cookie\|setcookie" /dev/null {} \;
-exec grep...è migliore del mio xargsmetodo perché non si strozzerà con gli spazi nei nomi dei file.
find . -type f -print0 | xargs -0 -I {} grep "search_string" {}. Naturalmente, anche le altre opzioni possono essere aggiunte.
Solo per includere un'altra alternativa, puoi anche usare questo:
find "/starting/path" -type f -regextype posix-extended -regex "^.*\.(php|html|js)$" -exec grep -EH '(document\.cookie|setcookie)' {} \;
Dove:
-regextype posix-extendeddice findche tipo di regex aspettarsi-regex "^.*\.(php|html|js)$"dice findalla regex stessa che i nomi dei file devono corrispondere-exec grep -EH '(document\.cookie|setcookie)' {} \;dice finddi eseguire il comando (con le sue opzioni e argomenti) specificato tra l' -execopzione e il \;per ogni file che trova, dove {}rappresenta dove va il percorso del file in questo comando.
mentre
Eopzione dice grepdi usare regex esteso (per supportare le parentesi) e ...Hopzione dice grepdi stampare i percorsi dei file prima delle partite.E, dato questo, se vuoi solo percorsi di file, puoi usare:
find "/starting/path" -type f -regextype posix-extended -regex "^.*\.(php|html|js)$" -exec grep -EH '(document\.cookie|setcookie)' {} \; | sed -r 's/(^.*):.*$/\1/' | sort -u
Dove
|[pipe] invia l'output di findal comando successivo dopo questo (che è sed, quindi sort)ropzione dice seddi usare regex esteso.s/HI/BYE/dice seddi sostituire ogni prima occorrenza (per riga) di "HI" con "BYE" e ...s/(^.*):.*$/\1/gli dice di sostituire la regex (^.*):.*$(che significa un gruppo [cose racchiuse da ()] includendo tutto [ .*= uno o più di qualsiasi carattere] dall'inizio della riga [ ^] fino a "il primo": "seguito da qualsiasi cosa fino a" la fine di riga [ $]) dal primo gruppo [ \1] della regex sostituita.udice all'ordinamento di rimuovere le voci duplicate (prendere sort -ucome facoltativo).... LONTANO dall'essere il modo più elegante. Come ho detto, la mia intenzione è quella di aumentare la gamma di possibilità (e anche di dare spiegazioni più complete su alcuni strumenti che potresti usare).