Niedawno zdecydowałem, że wystarczy - nauczyłem się płynnie używać grep. Minęły wszystkie trzy godziny, a problem z zabawkami już mnie zaskoczył.
Obecnie synchronizuję macierz RAID5, której postęp można monitorować poprzez czytanie /proc/mdstat
. Dane wyjściowe cat /proc/mdstat
pokazano poniżej.
$ 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>
Dla zabawy pomyślałem, że użyję watch
do monitorowania /proc/mdstat
w czasie rzeczywistym, przesyłania danych wyjściowych do grep i wyświetlania tylko szacowanego pozostałego czasu.
Moje podejście jest następujące:
watch cat /proc/mdstat | grep finish=\d+\.\d | grep \d+\.\d
Jestem zszokowany, dlaczego nie przyniosło to żadnych rezultatów. W rzeczywistości pierwsze wyrażenie grep nie generuje danych wyjściowych, nawet jeśli wydaje się działać na Regex101 .
Co ja robię źle?
\d
i zawsze cytować wyrażenia regularnego w środkugrep
. Zobacz składnię wyrażeń regularnych „grep” .