Saya sering menggunakan ini, peningkatan yang saya coba capai adalah untuk menghindari nama file gema yang tidak cocok dengan grep. Cara yang lebih baik untuk melakukan ini?
for file in `find . -name "*.py"`; do echo $file; grep something $file; done
Jawaban:
akan mencetak nama file setelah baris yang cocok.
akan mencetak nama file di depan setiap baris yang cocok (kami menambahkan
/dev/null
untuk kasus di mana hanya ada satu file yang cocok karenagrep
tidak mencetak nama file jika hanya melewati satu file untuk melihat. Implementasi GNUgrep
memiliki-H
opsi untuk itu sebagai alternatif).hanya akan mencetak nama file dari file yang memiliki setidaknya satu baris yang cocok.
Untuk mencetak nama file sebelum baris yang cocok, Anda bisa menggunakan awk sebagai gantinya:
Atau panggil
grep
dua kali untuk setiap file - meskipun itu akan kurang efisien karena akan menjalankan setidaknya satugrep
perintah dan hingga dua untuk setiap file (dan membaca konten file dua kali):Bagaimanapun, Anda tidak ingin mengulang-ulang output
find
seperti itu dan ingat untuk mengutip variabel Anda .Jika Anda ingin menggunakan shell loop, dengan alat GNU:
(juga berfungsi pada FreeBSD dan turunannya).
sumber
Jika Anda menggunakan GNU grep, Anda dapat menggunakan
-r
atau--recursive
opsi untuk melakukan pencarian sederhana ini untuk Anda:Anda hanya perlu
find
jika Anda membutuhkan lebih banyak predikat lanjut.sumber
grep
,grep
mungkin atau mungkin tidak melihat ke dalam symlink atau melintasi symlink ke direktori. Anda juga dapat menemukan beberapa variasi dalam penanganan jenis file non-reguler lainnya.Anda dapat memberitahu grep untuk memasukkan nama file dalam output. Jadi jika ada kecocokan akan ditampilkan di konsol; jika tidak ada kecocokan dalam suatu file, tidak ada baris yang akan dicetak untuk file itu.
Dari
man grep
:Jika file Anda mungkin memiliki nama dengan spasi di dalamnya, Anda harus mengganti pipa untuk menggunakan NUL Characters sebagai pemisah. Perintah lengkap sekarang akan terlihat seperti ini:
sumber
Anda dapat mencoba sesuatu seperti:
Perintah exec grep ini untuk setiap file, ditemukan oleh perintah find dan fitur perintah find standarnya
sumber
Gunakan
-l
argumennya.Penggunaan yang lebih menemukan adalah:
sumber
Ada
grep
alternatif yang secara default menampilkan hasilnya dalam format yang Anda inginkan. 2 yang paling populer yang saya tahu adalahag
(alias "pencari perak") danack
.ag
diiklankan sebagai alternatif yang lebih cepat untukack
.Saya tidak bisa menunjukkan Anda di sini, tetapi hasilnya berwarna rapi. Saya mendapatkan nama file berwarna hijau zaitun, nomor baris berwarna kuning emas, dan potongan yang cocok di setiap baris berwarna merah darah. Namun warna dapat disesuaikan.
sumber