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.