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