Dalam bash saya ingin mengembalikan nama file (dan path ke file) untuk setiap file tipe yang .php|.html|.js
berisi 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|.js
berisi string case-insensitive"document.cookie" | "setcookie"
Bagaimana saya melakukannya?
Jawaban:
egrep -ir --include=*.{php,html,js} "(document.cookie|setcookie)" .
The r
bendera berarti untuk mencari rekursif (mencari subdirektori). The i
bendera 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 directory
di Ubuntu Desktop 16; ada petunjuk?
--include=\*.{php,html,js}
Coba sesuatu seperti grep -r -n -i --include="*.html *.php *.js" searchstrinhere .
yang -i
membuatnya case insensitlve
yang .
pada sarana akhir Anda ingin memulai dari direktori Anda saat ini, ini bisa diganti dengan direktori apapun.
yang -r
berarti melakukan ini secara rekursif, sampai pohon direktori
yang -n
mencetak nomor baris untuk pertandingan.
yang --include
memungkinkan Anda menambahkan nama file, ekstensi. Wildcard diterima
Untuk info lebih lanjut, lihat: http://www.gnu.org/software/grep/
-l
opsi (cukup cetak nama file yang cocok) alih-alih-n
find
mereka dan grep
untuk 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)" /dir
pada direktori weigth ~ 500Gb.
Kedengarannya seperti pekerjaan yang sempurna untuk grep
atau 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 xargs
metode 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-extended
memberitahu find
regex seperti apa yang diharapkan-regex "^.*\.(php|html|js)$"
memberitahu find
regex itu sendiri nama file harus cocok-exec grep -EH '(document\.cookie|setcookie)' {} \;
memberitahu find
untuk menjalankan perintah (dengan opsi dan argumennya) yang ditentukan antara -exec
opsi dan \;
untuk setiap file yang ditemukannya, di mana {}
mewakili tempat path file masuk dalam perintah ini.
sementara
E
opsi memberitahu grep
untuk menggunakan regex diperpanjang (untuk mendukung tanda kurung) dan ...H
Opsi memberitahu grep
untuk 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 find
ke perintah selanjutnya setelah ini (yaitu sed
, lalu sort
)r
Opsi memberitahu sed
untuk menggunakan regex diperpanjang.s/HI/BYE/
memberitahu sed
untuk 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.u
memberi tahu sortir untuk menghapus entri duplikat (ambil sort -u
sebagai 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).