我最近决定足够了——我将学习流利地使用 grep。三个小时过去了,我已经被这个玩具问题难住了。
我目前正在同步一个 RAID5 阵列,可以通过读取/proc/mdstat. 的输出cat /proc/mdstat如下所示。
$ 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>
Run Code Online (Sandbox Code Playgroud)
为了好玩,我想我会使用实时watch监控/proc/mdstat,将它的输出通过管道传输到 grep,并仅显示估计的剩余时间。
我的方法如下:
watch cat /proc/mdstat | grep finish=\d+\.\d | grep \d+\.\d
我很难过为什么这没有产生任何输出。事实上,第一个 grep 表达式不会产生任何输出,即使它似乎适用于Regex101。
我究竟做错了什么?
grep没有\d转义符,您需要[0-9]改用。+需要在没有-E开关的情况下进行转义。这应该有效:
watch cat /proc/mdstat | grep 'finish=[0-9]\+\.[0-9]' | grep '[0-9]\+\.[0-9]'
Run Code Online (Sandbox Code Playgroud)