Dalam bash saya ingin mengembalikan nama file (dan path ke file) untuk setiap file tipe yang .php|.html|.jsberisi string case-insensitive"document.cookie" | "setcookie"
Bagaimana saya melakukannya?
Dalam bash saya ingin mengembalikan nama file (dan path ke file) untuk setiap file tipe yang .php|.html|.jsberisi string case-insensitive"document.cookie" | "setcookie"
Bagaimana saya melakukannya?
Jawaban:
egrep -ir --include=*.{php,html,js} "(document.cookie|setcookie)" .
The rbendera berarti untuk mencari rekursif (mencari subdirektori). The ibendera berarti kasus tidak sensitif.
Jika Anda hanya ingin nama file tambahkan bendera l(huruf kecil L):
egrep -lir --include=*.{php,html,js} "(document.cookie|setcookie)" .
grep -E ... >egrep ...
grep: (error|fail): No such file or directorydi Ubuntu Desktop 16; ada petunjuk?
--include=\*.{php,html,js}
Coba sesuatu seperti grep -r -n -i --include="*.html *.php *.js" searchstrinhere .
yang -imembuatnya case insensitlve
yang .pada sarana akhir Anda ingin memulai dari direktori Anda saat ini, ini bisa diganti dengan direktori apapun.
yang -rberarti melakukan ini secara rekursif, sampai pohon direktori
yang -nmencetak nomor baris untuk pertandingan.
yang --includememungkinkan Anda menambahkan nama file, ekstensi. Wildcard diterima
Untuk info lebih lanjut, lihat: http://www.gnu.org/software/grep/
-lopsi (cukup cetak nama file yang cocok) alih-alih-n
findmereka dan grepuntuk string:
Ini akan menemukan semua file dari 3 jenis Anda di / starting / path dan grep untuk ekspresi reguler '(document\.cookie|setcookie)'. Membagi menjadi 2 baris dengan garis miring terbalik hanya untuk keterbacaan ...
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)" /dirpada direktori weigth ~ 500Gb.
Kedengarannya seperti pekerjaan yang sempurna untuk grepatau mungkin ack
Atau konstruksi yang luar biasa ini:
find . -type f \( -name *.php -o -name *.html -o -name *.js \) -exec grep "document.cookie\|setcookie" /dev/null {} \;
-exec grep...lebih baik daripada xargsmetode saya karena tidak akan tersedak spasi dalam nama file.
find . -type f -print0 | xargs -0 -I {} grep "search_string" {}. Tentu saja, opsi lain dapat ditambahkan juga.
Hanya dengan memasukkan satu alternatif lagi, Anda juga dapat menggunakan ini:
find "/starting/path" -type f -regextype posix-extended -regex "^.*\.(php|html|js)$" -exec grep -EH '(document\.cookie|setcookie)' {} \;
Dimana:
-regextype posix-extendedmemberitahu findregex seperti apa yang diharapkan-regex "^.*\.(php|html|js)$"memberitahu findregex itu sendiri nama file harus cocok-exec grep -EH '(document\.cookie|setcookie)' {} \;memberitahu finduntuk menjalankan perintah (dengan opsi dan argumennya) yang ditentukan antara -execopsi dan \;untuk setiap file yang ditemukannya, di mana {}mewakili tempat path file masuk dalam perintah ini.
sementara
Eopsi memberitahu grepuntuk menggunakan regex diperpanjang (untuk mendukung tanda kurung) dan ...HOpsi memberitahu grepuntuk mencetak jalur file sebelum pertandingan.Dan, mengingat ini, jika Anda hanya menginginkan jalur file, Anda dapat menggunakan:
find "/starting/path" -type f -regextype posix-extended -regex "^.*\.(php|html|js)$" -exec grep -EH '(document\.cookie|setcookie)' {} \; | sed -r 's/(^.*):.*$/\1/' | sort -u
Dimana
|[pipa] kirim output dari findke perintah selanjutnya setelah ini (yaitu sed, lalu sort)rOpsi memberitahu seduntuk menggunakan regex diperpanjang.s/HI/BYE/memberitahu seduntuk mengganti setiap kemunculan Pertama (per baris) "HI" dengan "BYE" dan ...s/(^.*):.*$/\1/memintanya untuk mengganti regex (^.*):.*$(artinya grup [barang terlampir oleh ()] termasuk semua [ .*= satu atau lebih karakter apa saja] dari awal baris [ ^] hingga 'yang pertama': 'diikuti oleh apa saja hingga' akhir dari baris [ $]) oleh grup pertama [ \1] dari regex yang diganti.umemberi tahu sortir untuk menghapus entri duplikat (ambil sort -usebagai opsional).... JAUH dari cara yang paling elegan. Seperti yang saya katakan, maksud saya adalah untuk meningkatkan berbagai kemungkinan (dan juga untuk memberikan penjelasan yang lebih lengkap tentang beberapa alat yang dapat Anda gunakan).