Saya ingin tail -f
log saya. Namun, saya ingin menyaring semua yang memiliki kata-kata:
"ELB", "Pingdom", "Kesehatan"
Saya ingin tail -f
log saya. Namun, saya ingin menyaring semua yang memiliki kata-kata:
"ELB", "Pingdom", "Kesehatan"
Jawaban:
Saya tidak tahu tentang menggunakan awk alih-alih grep, tetapi ini berhasil bagi saya:
tail -f file.log | grep -Ev '(ELB|Pingdom|Health)'
EDIT: Seperti yang ditunjukkan oleh dmourati dan Caleb , Anda juga bisa menggunakan egrep
bukan grep -E
untuk kenyamanan. Pada beberapa sistem, ini akan berupa tautan ke biner yang sama, pada yang lain salinannya dipasok oleh paket grep. Apa pun itu hidup sebagai alternatif untuk -E
beralih. Namun, menurut halaman manual grep GNU:
[…] Dua program varian
egrep
danfgrep
tersedia.egrep
sama dengangrep -E
.fgrep
sama dengangrep -F
. Doa langsung sebagai salah satuegrep
ataufgrep
sudah usang, tetapi disediakan untuk memungkinkan aplikasi historis yang bergantung pada mereka untuk berjalan tanpa dimodifikasi.
Karena itu adalah perintah yang identik, itu turun ke preferensi kecuali Anda tidak memiliki egrep sama sekali. Namun untuk kompatibilitas kedepan, disarankan untuk menggunakan grep -E
sintaks karena metode lain secara resmi tidak digunakan lagi.
grep -E
alih-alih egrep
menjamin jawaban duplikat?
sed
, awk
, perl
, multitail
atau ninja_foo
.
Cobalah memipakannya ke egrep dengan daftar kata-kata yang ingin Anda saring:
tail -f log_file | egrep -v 'ELB|Pingdom|Health'
Perhatikan bahwa menggunakan tanda kurung di sekitar daftar kecocokan adalah opsional. Karena |
diperlakukan sebagai operator ATAU logis dengan grep apakah itu terjadi sebagai bagian dari sub-grup atau tidak. '(ELB|Pingdom|Health)'
akan berfungsi persis sama. Untuk beberapa orang, sintaksis mungkin lebih jelas; Saya merasa lebih mudah untuk mengetik tanpa karena saya dapat beralih dari satu pertandingan ke daftar kemungkinan pertandingan tanpa kembali menambahkan tanda kurung.
Untuk kredit tambahan, perlu disebutkan bahwa multitail
ninja foo melakukan penyaringan output. Misalnya, Anda dapat memfilter untuk kata-kata Anda seperti ini:
multitail -e ELB -e Pingdom -e Health -f log_file
Anda juga dapat menggunakannya untuk mewarnai atau menyorot output alih-alih hanya memfilternya.
Sunting : Lihat jawaban DTests dan komentar untuk penjelasan lengkap tentang bagaimana egrep hanyalah cara alternatif yang tidak digunakan untuk memecat grep -E
.
Mengapa Anda ingin mencatat informasi ini?
Jika Anda ingin memiliki perilaku skrip tergantung pada konten file log, Anda mungkin ingin melakukan pemfilteran menggunakan Expect. ( http://en.wikipedia.org/wiki/Expect ) Harapkan adalah ekstensi Tcl tetapi Ada juga versi Python dari Harapkan.
Harapkan memberi Anda ini beralih fleksibel seperti pernyataan yang memungkinkan Anda menentukan perilaku yang berbeda tergantung kondisi, atau pola yang ada dalam aliran input Anda. Sebagai contoh:
expect {
"password:" {
send "password\r"
}
"yes/no)?" {
send "yes\r"
set timeout -1
}
timeout {
exit
}
-re . {
exp_continue
}
eof {
exit
}
}
Jadi Anda menentukan pola dalam pernyataan harapan, dan Anda menentukan perilaku yang berbeda, dan Anda bisa membungkus semuanya dalam satu lingkaran, dan Anda dapat dengan mudah menulis filter yang sangat kuat yang juga menulis bagian dari input Anda ke file yang berbeda, atau menjatuhkannya sama sekali, atau mengambil tindakan dan menjalankan skrip lain tergantung pada apa yang ada di input Anda
Jadi, turun ke mengapa Anda mencoba untuk memfilter file log Anda, untuk mengambil tindakan pada input log, atau hanya untuk alasan arsip?