Saya mencari direktori secara rekursif menggunakan grep dengan argumen berikut berharap hanya mengembalikan pertandingan pertama. Sayangnya, ia mengembalikan lebih dari satu - bahkan dua yang terakhir kali saya lihat. Sepertinya saya punya terlalu banyak argumen, terutama tanpa mendapatkan hasil yang diinginkan. : - /
# grep -o -a -m 1 -h -r "Pulsanti Operietur" /path/to/directory
pengembalian:
Pulsanti Operietur
Pulsanti Operietur
Mungkin grep bukan cara terbaik untuk melakukan ini? Anda memberi tahu saya, terima kasih banyak.
-r
jelas), tetapi mereka tidak boleh terluka (saya tidak akan menggunakan-a
meskipun)grep -m 1
mengembalikan kedua instance karena ini.|head -1
dipecahkan!first not first from result
. Jawaban ini mencetak kecocokan pertama dalam file apa pun dan berhenti. Apa lagi yang Anda harapkan?Anda dapat mengirimkan
grep
hasil kehead
dalam hubungannya dengan stdbuf .Perhatikan, bahwa untuk memastikan penghentian setelah kecocokan ke-N, Anda harus menggunakan
stdbuf
untuk memastikangrep
jangan menyangga outputnya:Begitu
head
mengkonsumsi 1 baris, itu dihentikan dangrep
akan menerimaSIGPIPE
karena masih mengeluarkan sesuatu ke pipa saathead
hilang.Ini diasumsikan bahwa tidak ada nama file yang mengandung baris baru.
sumber
xargs
:find . -name '*.gz' | xargs -I '{}' stdbuf -oL zgrep -al 'pattern' {} | head -n 1
. Namun, ini tidak berakhir pada pertandingan pertama. Ada saran?grep
's--line-buffered
pilihan mencegah penyangga kepala tanpa memanggil utilitas tambahan?Program grep-a-like saya
ack
memiliki-1
opsi yang berhenti pada kecocokan pertama yang ditemukan di mana saja. Ini mendukung-m 1
yang mengacu pada @mvp juga. Saya meletakkannya di sana karena jika saya mencari pohon kode sumber yang besar untuk menemukan sesuatu yang saya tahu hanya ada dalam satu file, tidak perlu menemukannya dan harus menekan Ctrl-C.sumber
ag
mungkin cepat, tetapi tidak memiliki-1
opsi yang berguna dalam kasus iniAnda dapat menggunakan perintah di bawah ini jika Anda ingin mencetak seluruh baris dan nama file jika kemunculan kata tertentu dalam direktori saat ini yang Anda cari.
sumber
Satu liner, menggunakan
find
:sumber
grep -r
bekerja jauh lebih cepat - satu-satunya salinan yang melakukan traversal direktori.