2013-02-18 25 views
7

Tôi đang cố gắng tạo một tập lệnh để nhập các tệp nhật ký nằm trong/var/log /. Tôi có thể hoặc các nhật ký không nén hoặc nhật ký nén (như là kết quả của việc ghi nhật ký) nhưng không thể thực hiện cả hai trong một lệnh (tôi nhận được "tệp nhị phân (đầu vào chuẩn) khớp" khi tôi cố gắng làm như vậy), là nó thậm chí có thể làm một điều như vậy? cảm ơn!Tôi có thể grep cả tệp đã nén và các tệp không nén bằng cùng một lệnh

+0

@StevenPenny gz, vì vậy ví dụ syslog, syslog.1, syslog.2.gz, syslog.3.gz và vân vân – lacrosse1991

Trả lời

6

Hãy thử làm điều này bằng cách sử dụng chức năng :

greplog() { 
    cd /var/log 
    { 
     cat $1 $1.*[0-9] 
     zcat $1.*.gz 
    } | grep "$2" 
} 

Cách sử dụng:

$ greplog syslog pattern 
+1

hoạt động hoàn hảo, cảm ơn! – lacrosse1991

+0

Để nhất quán với grep và cộng sự, sẽ không tốt hơn nếu có 'sglog mô hình' greplog? – hbogert

7

zgrep có thể làm điều đó cho bạn, nó xử lý cả file nén và không nén. Một nhược điểm là nó không thể xử lý các thư mục đệ quy. Nhưng đối với trường hợp của bạn, nó là đầy đủ và bạn có thể lọc ví dụ: syslog như sau:

$ zgrep PATTERN /var/log/syslog* 
1

xzgrep là một một cửa cho các tập tin thường được nén, ít nhất là trên Ubuntu 16 và MacOS 10.12 (cài đặt với xz từ MacPorts). Từ trang man: xzgrep invokes grep(1) on files which may be either uncompressed or compressed with xz(1), lzma(1), gzip(1), or bzip2(1).

sử dụng (lưu ý -r không được hỗ trợ):

$ find . -type f | parallel -j4 'xzgrep -Hn "PATTERN" {}'

Các vấn đề liên quan