Gần đây tôi đã quyết định rằng đủ là đủ - tôi sẽ học cách sử dụng grep một cách trôi chảy. Đã ba giờ trôi qua và tôi đã bị vướng vào vấn đề đồ chơi này.
Tôi hiện đang đồng bộ hóa một mảng RAID5, tiến trình có thể được theo dõi bằng cách đọc /proc/mdstat. Đầu ra của cat /proc/mdstatđược hiển thị dưới đây.
$ cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md1 : active raid5 sda4[0] sdb4[1] sdc4[2]
      5858765824 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
      [=============>.......]  resync = 67.3% (1972073120/2929382912) finish=205.7min speed=77537K/sec
md0 : active raid5 sda3[0] sdb3[1] sdc3[2]
      998400 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
unused devices: <none>
Để giải trí, tôi nghĩ rằng tôi sẽ sử dụng watchđể theo dõi /proc/mdstattrong thời gian thực, chuyển đầu ra thành grep và chỉ hiển thị thời gian còn lại ước tính.
Cách tiếp cận của tôi như sau:
watch cat /proc/mdstat | grep finish=\d+\.\d | grep \d+\.\d
Tôi không biết tại sao điều này không tạo ra đầu ra. Trong thực tế, biểu thức grep đầu tiên không tạo ra đầu ra, mặc dù nó dường như hoạt động trên Regex101 .
Tôi đang làm gì sai?
\dvà luôn trích dẫn một regex bên tronggrep. Xem cú pháp biểu thức chính quy 'grep' .