Saya perlu mencari 50 baris pertama dari setiap file dalam direktori dan subdirektori.
Ini akan melakukan bagian rekursif, tetapi bagaimana saya membatasi hanya 50 baris pertama dari setiap file?
grep -r "matching string here" .
Beberapa file ini sangat besar, dan saya hanya ingin mereka cocok dengan 50 baris pertama. Saya mencoba mempercepat proses dengan tidak mencari megabyte data biner di beberapa file.
Jawaban:
Jika Anda hanya ingin file yang cocok:
atau
Jika Anda hanya menginginkan string yang cocok:
atau lebih baik,
Dan jika Anda menginginkan keduanya:
Catatan.
sed
bukan dari kombohead
-grep
.-exec ... +
dalam setiap metode, tetapi Anda harus mengkodekan loop batin Anda sendiri! (latihan sepele diserahkan kepada pembaca). Ini mungkin sedikit lebih efisien jika Anda memiliki trilyun file.sumber
Jika Anda memerlukan output grep seperti pada aslinya, Anda bisa melakukan:
Jika Anda hanya membutuhkan nama file, Anda dapat mengganti grep ke-2 dengan
echo "$f"
.sumber
Anda harus menggabungkan beberapa utilitas berbeda untuk mendapatkan fungsionalitas yang diinginkan. Gunakan
find
perintah untuk mengulang direktori, temukan semua file dan jalankanhead
perintah pada setiap file yang ditemukan. Thehead
perintah dapat digunakan untuk membuang hanya 50 baris pertama dari setiap file. Akhirnya, pipa keluaran ke grep untuk mencari string yang Anda inginkan.find . -type f -exec head -n 50 {} ";" | grep "matching string here"
sumber