Làm thế nào về điều này, mà tôi quản lý để đạt được cảm ơn, một phần, cho bài viết này.
Bạn muốn tìm một số tệp, giả sử nhật ký với các tên khác nhau nhưng một mẫu (ví dụ filename=logfile.DATE
), bên trong một số thư mục có mẫu (ví dụ /logsapp1, /logsapp2
). Mỗi tệp có một mẫu bạn muốn grep (ví dụ "init time"
) và bạn muốn có "init time"
từng tệp, nhưng biết tệp đó thuộc về tệp nào.
find ./logsapp* -name logfile* | xargs -I{} grep "init time" {} \dev\null | tee outputfilename.txt
Sau đó, outputfilename.txt
sẽ là một cái gì đó như
./logsapp1/logfile.22102015: init time: 10ms
./logsapp1/logfile.21102015: init time: 15ms
./logsapp2/logfile.21102015: init time: 17ms
./logsapp2/logfile.22102015: init time: 11ms
Nói chung
find ./path_pattern/to_files* -name filename_pattern* | xargs -I{} grep "grep_pattern" {} \dev\null | tee outfilename.txt
Giải trình:
find
lệnh sẽ tìm kiếm tên tệp dựa trên mẫu
sau đó, ống xargs -I{}
sẽ chuyển hướng find
đầu ra đến{}
đó sẽ là đầu vào cho grep ""pattern" {}
Sau đó, mẹo để grep
hiển thị tên tệp\dev\null
và cuối cùng, viết đầu ra trong tệp với tee outputfile.txt
Điều này làm việc cho tôi trong grep
phiên bản 9.0.5 build 1989.
grep --version