Điểm:0

Làm cách nào để kết hợp lệnh grep và lệnh sed trên cùng một tệp văn bản và xuất ra tệp khác?

lá cờ mx

Tôi đã sao chép nhật ký sau từ trình khám phá nhật ký grafana.

2021-06-12 21:59:41 
12-06-2021 20:59:41.118 THÔNG TIN 1 --- [edElastic-14048] c.o.i.i.s.i.UserManagementServiceImpl : BUNDLE_PURCHASE_FAILED || 213550040214 | Không thể thực hiện giao dịch mua gói đơn giản cho giao dịch 5001235315807102834, Lỗi giải mã JSON lỗi: Không thể giải tuần tự hóa giá trị của loại

đầu ra mong đợi của tôi:

2021-06-12 21:59:41  213550040214 

Tôi sử dụng lệnh bên dưới để nhận đầu ra như mong đợi:

grep -Eo "[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0 -9]{2}" bfailed.txt | grep -Eo "[0-9]{12}" | sed '/[a-zA-Z]/d' > b.txt

Nhưng lệnh này không đưa ra bất kỳ đầu ra nào. Làm thế nào tôi có thể nhận được đầu ra mong đợi?

lá cờ cn
Bạn nên kiểm tra trang grep man để xem `-o` làm gì.
lá cờ cn
Chìa khóa để gỡ lỗi đường ống là chạy lệnh đầu tiên và kiểm tra đầu ra của nó, sau đó thêm lệnh tiếp theo vào đường ống, v.v.
Điểm:2
lá cờ cn

Lệnh của bạn không có đầu ra vì lệnh thứ hai tiếng kêu lệnh không khớp với bất cứ điều gì:

grep -Eo "[0-9]{12}" 

Điều đó tìm kiếm chính xác 12 số liên tiếp nhưng bạn không bao giờ có 12 số liên tiếp vì đầu tiên của bạn tiếng kêu chỉ in ra ngày và giờ, vì vậy phần còn lại của dòng đã bị mất.

Nếu đầu vào của bạn thực sự chỉ là hai dòng bạn hiển thị, thì tất cả những gì bạn cần là in trường thứ 1, thứ 2 và thứ 11 trên các dòng có ít nhất 11 trường:

$ awk 'NF>10{in $1,$2,$11}' tệp
2021-06-12 20:59:41.118 213550040214

Nếu bạn có nhiều dòng hơn và thực sự cần khớp với định dạng ngày và giờ cụ thể, bạn có thể thử điều này để thay thế:

$ sed -En 's/([0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2 }:[0-9]{2}).*([0-9]{12}).*/\1 \2/p' tệp 
2021-06-12 20:59:41 213550040214

Các -E cho phép các biểu thức chính quy mở rộng giúp đơn giản hóa cú pháp ở đây và -N kể sed không in bất cứ thứ gì theo mặc định. Sau đó, toán tử thay thế (s/cũ/mới/) sẽ cố gắng đối sánh các định dạng bạn đang tìm kiếm và nắm bắt chúng (các mẫu "chụp" trong ngoặc đơn) để chúng tôi có thể thay thế mọi thứ chỉ bằng hai phần phù hợp (\1 \2).

Lưu ý rằng điều này sẽ tìm thấy Cuối cùng kéo dài 12 số, vì vậy sẽ không thành công nếu bạn có nhiều hơn một bộ như vậy. Chúng tôi có thể cung cấp cho bạn giải pháp cụ thể hơn nhưng bạn phải cung cấp cho chúng tôi thêm chi tiết về tệp của bạn, điều gì có thể thay đổi và điều gì không bao giờ thay đổi.

Mihiran Chathuranga avatar
lá cờ mx
Điều này đang hoạt động. Thực ra tôi đang sử dụng trình khám phá nhật ký grafana. Nhưng tôi không biết cách viết các truy vấn Loki phức tạp như vậy. Đó là lý do tại sao tôi sao chép nhật ký vào tệp văn bản và thực hiện theo cách này. Bạn có biết gì về các truy vấn Loki không.
terdon avatar
lá cờ cn
@MihiranChathuranga không. Tôi không biết Loki là gì. Nhưng đó là lý do tại sao bạn cần đưa ra ngữ cảnh trong câu hỏi của mình.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.