J'ai récemment décidé que ça suffisait - j'allais apprendre à utiliser couramment grep. Cela fait trois heures et je suis déjà déconcerté par ce problème de jouet.
Je synchronise actuellement une matrice RAID5, dont la progression peut être surveillée en lisant /proc/mdstat
. La sortie de cat /proc/mdstat
est illustrée ci-dessous.
$ 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>
Pour le plaisir, je pensais que j'utiliserais watch
pour surveiller /proc/mdstat
en temps réel, diriger sa sortie vers grep et n'afficher que le temps restant estimé.
Mon approche est la suivante:
watch cat /proc/mdstat | grep finish=\d+\.\d | grep \d+\.\d
Je suis perplexe quant à la raison pour laquelle cela n'a produit aucune sortie. En fait, la première expression grep ne produit aucune sortie, même si elle semble fonctionner sur Regex101 .
Qu'est-ce que je fais mal?
\d
et toujours citer une expression régulière à l'intérieurgrep
. Voir la syntaxe d'expression régulière 'grep' .Réponses:
Si vous souhaitez utiliser la syntaxe regex, vous avez besoin de l'option -P avec grep. Consultez la question précédemment posée ici La syntaxe de grep est-elle différente de regex?
la source
grep
n'a pas l'\d
échappatoire, vous devrez utiliser à la[0-9]
place.+
doit être échappé sans l'-E
interrupteur.Cela devrait fonctionner:
la source
-P
commutateur me permettra d'utiliser des expressions rationnelles d'une manière avec laquelle je suis déjà assez à l'aise. Je vote toujours votre réponse, car c'est une bonne solution. Je garderai cela à l'esprit! Merci!?, +, {, |, (, and )
l'échappement ait une signification spéciale.Utilisez
sed
plutôt, cela a fonctionné pour moi:la source