Recientemente decidí que ya era suficiente: iba a aprender a usar grep con fluidez. Han pasado tres horas y ya estoy perplejo por este problema con los juguetes.
Actualmente estoy sincronizando una matriz RAID5, cuyo progreso se puede monitorear leyendo /proc/mdstat
. La salida de cat /proc/mdstat
se muestra a continuación.
$ 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>
Por diversión, pensé que lo usaría watch
para monitorear /proc/mdstat
en tiempo real, canalizar su salida a grep y mostrar solo el tiempo restante estimado.
Mi enfoque es el siguiente:
watch cat /proc/mdstat | grep finish=\d+\.\d | grep \d+\.\d
Estoy perplejo de por qué esto no produjo salida. De hecho, la primera expresión grep no produce salida, aunque parece funcionar en Regex101 .
¿Qué estoy haciendo mal?
\d
y siempre citar una expresión regular dentrogrep
. Consulte la sintaxis de expresión regular 'grep' .Respuestas:
Si desea utilizar la sintaxis de expresiones regulares, necesita -P cambiar con grep. Consulte la pregunta anterior aquí ¿Es la sintaxis grep diferente de la expresión regular?
fuente
grep
no tiene el\d
escape, deberás usarlo[0-9]
en su lugar.+
necesita ser escapado sin el-E
interruptor.Esto debería funcionar:
fuente
-P
cambio me permitirá usar expresiones regulares de una manera con la que ya me siento bastante cómodo. Sin embargo, todavía estoy votando tu respuesta porque es una buena solución. Voy a tener esto en cuenta! ¡Gracias!?, +, {, |, (, and )
se escape para tener un significado especial.Use en su
sed
lugar, esto funcionó para mí:fuente