Ini yang saya ketik dan saya diharapkan hanya mendapatkan log pengguna di "" . Tapi saya punya seluruh log di server:
for i in `ls *.log.gz`; do zcat $i | grep "U2779897722719715411" >> sara.log; done ; *
Apa yang harus saya ubah dalam loop ini untuk menemukan hanya log dengan kata kunci ini?
Terima kasih.
Jawaban yang Diterima:
zgrep perintah ini sangat berguna untuk mengambil file terkompresi, dan menghindari kebutuhan Anda untuk mem-pipe zcat ke grep . Anda juga tidak perlu menggunakan for loop untuk membuat daftar file dengan globbing (pencocokan pola shell).
zgrep U2779897722719715411 *.log.gz >> sara.log
Perintah itu akan menampilkan nama file dan baris yang berisi U27798977222719715411 yang dipisahkan oleh : karakter.
Jika Anda tidak menginginkan awalan nama file, Anda dapat menggunakan -h pilihan untuk zgrep :
zgrep -h U2779897722719715411 *.log.gz >> sara.log
Ini juga dapat dicapai dengan loop, tetapi hindari menggunakan ls , dan lakukan pengalihan ke file setelah loop selesai:
for i in *.log.gz ; do zgrep U2779897722719715411 "$i" ; done >> sara.log
Atau jika Anda hanya menginginkan nama file dari file yang berisi string pengguna U2779897722719715411, Anda dapat menggunakan -l pilihan untuk zgrep di salah satu dari perintah di atas:
zgrep -l U2779897722719715411 *.log.gz >> sara.log
atau
for i in *.log.gz ; do zgrep -l U2779897722719715411 "$i" ; done >> sara.log