Apakah ada cara untuk mengatakan ack
hanya mencari teks pada folder saat ini? (atau tentukan max-depth
level?) Dan dengan grep
?
Apakah ada cara untuk mengatakan ack
hanya mencari teks pada folder saat ini? (atau tentukan max-depth
level?) Dan dengan grep
?
Jawaban:
Gunakan -n
untuk no-recurse
:
$ ack -n foo
grep
tidak rekursif secara default, dan Anda harus menggunakan -r
bendera hanya jika Anda ingin pencarian rekursif.
Anda dapat mencari direktori saat ini dengan grep
sebagai berikut:
$ grep -- foo *
Anda dapat menemukan pasangan dengan argumen -exec. contoh:
find . -maxdepth 1 -exec grep foo {} \;
Ini dapat diskalakan, yaitu -maxdepth 2
-maxdepth 1
) cukup besar. Sebagai contoh -maxdepth 2
. Saya tidak tahu bagaimana menjelaskan hasil edit yang Anda buat.
-maxdepth
) bukan sintaksis portable / standar (hanya GNU dan beberapa BSD). Juga, tidak ada gunanya menggunakan di \;
sini (jalankan satu grep
per file). Gunakan grep -H foo {} +
(spesifik GNU) atau grep foo /dev/null {} +
(standar) untuk memastikan nama file selalu dicetak. Setara dengan standar -maxdepth 2
adalahfind . -path './*/*' -type d -prune -o -type f -exec ...
.
karena Anda tidak memberikannya -mindepth 1
) sementara GNU grep
tidak akan mencoba membaca direktori dengan -r
(itu berulang pada mereka). Anda mungkin ingin menambahkan -d skip
ke grep
(dengan asumsi GNU grep) atau lebih baik menambahkan ! -type d
ke find
atau bahkan lebih baik -type f
(atau -xtype f
dengan asumsi GNU find
) karena Anda mungkin tidak ingin grep
membaca file yang tidak biasa.
grep -Hin
dengan pendekatan ini sehingga saya bisa melihat nama file dan garis kejadiannya.
-n
untuk tidak muncul kembali sama sekali.