Bash'da büyük / .php|.html|.jsküçük harfe duyarlı olmayan dizeyi içeren her dosya için dosya adını (ve dosyanın yolunu) döndürmek istiyorum"document.cookie" | "setcookie"
Bunu nasıl yaparım?
Bash'da büyük / .php|.html|.jsküçük harfe duyarlı olmayan dizeyi içeren her dosya için dosya adını (ve dosyanın yolunu) döndürmek istiyorum"document.cookie" | "setcookie"
Bunu nasıl yaparım?
Yanıtlar:
egrep -ir --include=*.{php,html,js} "(document.cookie|setcookie)" .
rBayrak (alt dizinleri arama) özyinelemeli arama anlamına gelir. iBayrak vaka duyarsız demektir.
Sadece dosya adlarını istiyorsanız l(küçük harf L) bayrağını ekleyin :
egrep -lir --include=*.{php,html,js} "(document.cookie|setcookie)" .
grep -E ... >egrep ...
grep: (error|fail): No such file or directoryUbuntu Desktop 16'da hata aldım ; ipucu var mı?
--include=\*.{php,html,js}
Gibi bir şey dene grep -r -n -i --include="*.html *.php *.js" searchstrinhere .
-ide olay insensitlve yapar
.Eğer mevcut dizinden başlamak istiyorum uç aracı, bu herhangi bir dizine ile ikame edilebilir.
-raraçlar sağa Dizin ağacı, yinelemeli bunu
-nmaçları için satır numarasını yazdırır.
--includeEğer uzantıları dosya adları eklemenizi sağlar. Joker karakterler kabul edildi
Daha fazla bilgi için bkz. Http://www.gnu.org/software/grep/
-lseçeneği kullanın (sadece eşleşen dosya adlarını yazdırın)-n
findonları ve grepdize için:
Bu, 3 türünüzdeki tüm dosyaları başlangıç / yol ve grep komutlarında normal ifade için bulur '(document\.cookie|setcookie)'. Sadece okunabilirlik için ters eğik çizgi ile 2 çizginin üzerine bölün ...
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)" /dir~ 500Gb ağırlık dizininde 5 veya 8 kereden daha hızlı .
Kulağa mükemmel grepya da belki de ack için mükemmel bir iş gibi geliyor
Veya bu harika yapı:
find . -type f \( -name *.php -o -name *.html -o -name *.js \) -exec grep "document.cookie\|setcookie" /dev/null {} \;
-exec grep...daha iyidir xargs.
find . -type f -print0 | xargs -0 -I {} grep "search_string" {}. Tabii ki, diğer seçenekler de eklenebilir.
Sadece bir alternatif daha eklemek için şunu da kullanabilirsiniz:
find "/starting/path" -type f -regextype posix-extended -regex "^.*\.(php|html|js)$" -exec grep -EH '(document\.cookie|setcookie)' {} \;
Nerede:
-regextype posix-extendedfindne tür regex bekleyeceğini söyler-regex "^.*\.(php|html|js)$"findnormal ifadenin kendisine dosya adlarının eşleşmesi gerektiğini söyler-exec grep -EH '(document\.cookie|setcookie)' {} \;seçenek ile bulduğu her dosya için findbelirtilen komutu (seçenekleri ve bağımsız değişkenleriyle) çalıştırmasını söyler ; burada dosya yolu bu komutun nereye gittiğini gösterir.-exec\;{}
süre
Eseçeneği grep(parantezleri desteklemek için) genişletilmiş normal ifadeyi kullanmayı söyler ve ...Hseçeneği, grepdosya yollarını eşleşmeden önce yazdırmayı söyler .Ve bu göz önüne alındığında, yalnızca dosya yollarını istiyorsanız, şunları kullanabilirsiniz:
find "/starting/path" -type f -regextype posix-extended -regex "^.*\.(php|html|js)$" -exec grep -EH '(document\.cookie|setcookie)' {} \; | sed -r 's/(^.*):.*$/\1/' | sort -u
Nerede
|[pipe] çıktısını findbundan sonra bir sonraki komuta gönderir (yani sed, o zaman sort)rseçeneği sedgenişletilmiş normal ifadeyi kullanmayı söyler .s/HI/BYE/söyler sed"BYE" ve "HI" nin (her satıra) her şeyden önce tekrarlamasını değiştirmek için ...s/(^.*):.*$/\1/regex yerine söyler (^.*):.*$bir anlam ( grup [çevrelediği şeyler ()dahil] her şeyi [ .*daha herhangi-karakterin = bir veya] satırın başına [ ^] dek 'ilk ':' ifadesini şey kadar' sonunda satır [ $]) değiştirilen normal ifadenin ilk grubu [ \1] tarafından .usıralamaya yinelenen girişleri kaldırmasını söyler ( sort -uisteğe bağlı olarak al).... en zarif yoldan FAR. Dediğim gibi, amacım olasılıkları artırmak (ve ayrıca kullanabileceğiniz bazı araçlar hakkında daha eksiksiz açıklamalar yapmak).