Saya memiliki satu set file log yang perlu saya tinjau dan saya ingin mencari string spesifik pada file yang sama sekaligus. Apakah ini mungkin? Saat ini saya menggunakan
grep -E 'fatal|error|critical|failure|warning|' /path_to_file
Bagaimana saya menggunakan ini dan mencari untaian beberapa file sekaligus? Jika ini adalah sesuatu yang perlu dituliskan, dapatkah seseorang memberikan naskah sederhana untuk melakukan ini?
grep
dapat mengambil lebih dari satu argumen file.Jawaban:
sumber
grep
melewati direktori, tetapi masih memeriksa semua file secara rekursif?grep -E 'text' **/*
berfungsi, tetapi memberikan pesan kesalahan untuk setiap subdirektori (dan kemudian dengan benar memeriksa semua file di dalamnya)find . -type f -exec grep -E 'fatal|error|critical|failure|warning' {} +
Anda dapat menggunakan sesuatu seperti ini:
Ini akan menemukan setiap file dengan
.log
ekstensi dan menerapkangrep
perintah.sumber
xargs
dan kemungkinan kerusakan parah pada spasi putih dalam nama file saat Anda bisa menggunakannyafind . -name '*.log' -exec grep -E 'fatal|error|critical|failure|warning' {} +
?Jika lebih sederhana, Anda bisa menentukan masing-masing file satu demi satu.
sumber
Jika Anda perlu memahami sekumpulan nama file yang sewenang-wenang yang tidak dapat diambil dengan ekspresi reguler:
Apa keuntungan dari menempel nama file satu demi satu? Anda dapat menyusun daftar nama file pada file teks dan kemudian menempelkannya.
sumber
Jika Anda ingin mencari secara rekursif dalam file subdirektori juga, maka Anda dapat menggunakan perintah di bawah ini
Ini akan mencari secara rekursif dalam file subdirektori juga
sumber
Ini adalah tugas yang sangat memakan waktu. Dan ya, itu tentu perlu dituliskan jika Anda akan mencari beberapa string dalam beberapa log yang berbeda pada saat yang sama. Tetapi saya baru-baru ini harus melakukan ini dan itu cukup menyakitkan. Namun demikian, ini dilakukan dan siap dan dapat diunduh dari tautan berikut:
Unduh Script Pencarian Log
Cara kerjanya cukup sederhana.
Skenario 1: Pantau SATU string hanya dalam SATU file log
Skenario 2: Pantau string MULTIPLE hanya dalam SATU file log
Skenario 3: Memantau string Tunggal / Banyak dalam beberapa file log
Catatan:
_P_ berarti ATAU - Ini menggantikan pipa "|" simbol karena kecil kemungkinan Anda harus mencari string yang mengandung "_P_". Jika Anda tidak ingin mengetik "_P_", Anda bisa mengganti _P_ dengan "|".
Saat menggunakan skrip ini, parameter yang akan sering Anda ubah adalah:
Saat menggunakan '-ndfoundmul', Anda akan mendapatkan output yang mirip dengan:
Solusi untuk Masalah Poster Asli: Pindai Banyak string dalam banyak file log
OS: Ini diuji di Ubuntu dan Red Hat
sumber
Ini akan mencari 'fatal atau error atau critical atau failure atau warning atau search-string' dalam file dengan nama yang dimulai dengan 'log_file?' dan ekstensi 'lo ' * di path / path / ke / file / / dan berikan string pencarian warna acak dan nomor baris cetak yang ditemukan di.
sumber
grep
keterampilan Anda jadi semoga beruntung pada karir USE Anda!-E
dan-F
tidak dapat digunakan pada saat yang sama, mereka saling bertentangan (salah ketik).Jawaban JigarGandhi menunjukkan penggunaan wildcard asterisk. Ada lebih banyak dari mereka dan Anda dapat melihatnya di sini atau dengan berlari
man 7 glob
.Salah satunya yang menurut saya berguna adalah rentang yang cocok dengannya
[]
. Karena sistem yang saya kerjakan menghasilkan file log berurutan misalnyaproduct.log.1
product.log.2
...
product.log.200
, itu berguna untuk melakukan grep dengan satu perintah pada 3 atau 4 file berurutan tetapi tidak lebih. Jadi inigrep 'whatever' product.log.[5-7]
akan menerima semua file yang diakhiri dengan product.log. 5, 6 atau 7. Wildcard tidak perlu ada di akhir sehingga jawaban flickerfly dapat disederhanakan
grep -E 'fatal|error|critical|failure|warning' file[1,2].log
Perhatikan juga bahwa wildcard ini dapat digunakan dalam perintah lain juga seperti di
cp
misalnya.sumber
Anda juga dapat menggunakan kurung kurawal jika file semua folder yang sama.
Lihat sebuah contoh
Jika Anda menambahkan s ke grep ini menekan kesalahan tentang file yang hilang
Saya hanya bereksperimen dengan ini sendiri untuk melakukan perintah yang bekerja di beberapa distro di mana itu dalam satu file vs yang lain karena perbedaan OS.
Log surat
Log Surat yang Diarsipkan menggunakan 2> / dev / null untuk menekan zgrep yang hilang .gz peringatan
Referensi: Apakah ada cara untuk merujuk ke beberapa file dalam direktori tanpa mengetik ulang seluruh path?
sumber