Apa cara terbaik untuk mendapatkan hanya kecocokan terakhir dari ekspresi reguler dalam file menggunakan grep?
Juga, mungkinkah untuk mulai menangkap dari akhir file alih-alih dari awal dan berhenti ketika menemukan kecocokan pertama?
Apa cara terbaik untuk mendapatkan hanya kecocokan terakhir dari ekspresi reguler dalam file menggunakan grep?
Juga, mungkinkah untuk mulai menangkap dari akhir file alih-alih dari awal dan berhenti ketika menemukan kecocokan pertama?
Jawaban:
Kamu bisa mencoba
grep pattern file | tail -1
atau
tac file | grep pattern | head -1
atau
tac file | grep -m1 pattern
grep -n) di file aktual, saya pikir taccukup banyak yang harus dihindari, kecuali saya ingin melakukan pengurangan dengan wc -l. Kalau tidak tacdengan grep -m1banyak artinya.
grepakan berhenti bekerja setelah pertandingan pertama. tanpa -m 1, greppertama-tama akan menemukan semua pola yang cocok dalam file , kemudian headhanya akan menunjukkan yang pertama - jauh lebih efisien. Dennis, tolong pertimbangkan untuk memposting ini dalam jawaban yang terpisah!
Untuk seseorang yang bekerja dengan file teks besar di Unix / Linux / Mac / Cygwin. Jika Anda menggunakan Windows, periksa ini tentang perangkat Linux di Windows: https://stackoverflow.com/questions/3519738/what-is-the-best-way-to-use-linux-utilities-under-windows .
Seseorang dapat mengikuti alur kerja ini untuk memiliki kinerja yang baik:
zqdari paket.Kutipan dari github readme:
Membuat indeks
zindex perlu diberi tahu bagian mana dari setiap baris yang merupakan indeks. Ini dapat dilakukan dengan ekspresi reguler, dengan bidang, atau dengan menyalurkan setiap baris melalui program eksternal.
Secara default zindex membuat indeks file.gz.zindex ketika diminta untuk mengindeks file.gz.
Contoh:
buat indeks pada baris yang cocok dengan ekspresi reguler numerik. Grup tangkapan menunjukkan bagian yang akan diindeks, dan opsi menunjukkan setiap baris memiliki indeks numerik yang unik.
$ zindex file.gz --regex 'id:([0-9]+)' --numeric --uniqueContoh: buat indeks pada bidang kedua file CSV:
$ zindex file.gz --delimiter , --field 2Contoh:
membuat indeks pada bidang JSON orderId.id di salah satu item dalam array tindakan root dokumen (memerlukan jq). Kueri jq membuat larik semua orderId.ids, kemudian bergabung dengan spasi untuk memastikan setiap baris individu disalurkan ke jq menciptakan satu baris output, dengan beberapa kecocokan dipisahkan oleh spasi (yang merupakan pemisah default).
$ zindex file.gz --pipe "jq --raw-output --unbuffered '[.actions[].orderId.id] | join(\" \")'"
Meminta indeks
Program zq digunakan untuk menanyakan indeks. Itu diberikan nama file terkompresi dan daftar permintaan. Sebagai contoh:
$ zq file.gz 1023 4443 554Juga dimungkinkan untuk menghasilkan berdasarkan nomor baris, jadi untuk mencetak baris 1 dan 1000 dari file:
$ zq file.gz --line 1 1000
Saya selalu menggunakan kucing (tapi ini membuatnya sedikit lebih lama): cat file | grep pattern | tail -1
Saya akan menyalahkan guru kursus admin linux saya di kampus yang suka kucing :))))
- Anda tidak harus membuat file cat terlebih dahulu sebelum mengambilnya. grep pattern file | tail -1dan lebih efisien juga.
catfile dan pipa itu grep. Anda dapat grepmencari file langsung melalui grep pattern file(dan kemudian gunakan tailuntuk mengembalikan hasil terakhir), seperti dalam jawaban Cakemox.
tac file | grep -m 1 pattern