Recentemente, decidi que bastava - eu aprenderia a usar o grep fluentemente. Já faz três horas e eu já estou perplexo com esse problema de brinquedo.
Atualmente, estou sincronizando uma matriz RAID5, cujo progresso pode ser monitorado pela leitura /proc/mdstat
. A saída de cat /proc/mdstat
é mostrada abaixo.
$ 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 diversão, pensei em usar watch
para monitorar /proc/mdstat
em tempo real, canalizar sua saída para grep e mostrar apenas o tempo restante estimado.
Minha abordagem é a seguinte:
watch cat /proc/mdstat | grep finish=\d+\.\d | grep \d+\.\d
Estou perplexo quanto ao por que isso não produziu saída. De fato, a primeira expressão grep não produz saída, mesmo que pareça funcionar no Regex101 .
O que estou fazendo errado?
\d
e sempre citar uma regex dentrogrep
. Consulte a sintaxe da expressão regular 'grep' .Respostas:
Se você quiser usar a sintaxe regex, precisará da opção -P com grep. Confira aqui a convidado anteriormente. A sintaxe grep é diferente da regex?
fonte
grep
não tiver\d
escapatória, você precisará usar[0-9]
.+
precisa ser escapado sem a-E
chave.Isso deve funcionar:
fonte
-P
opção permitirá que eu use expressões regulares de uma maneira com a qual já estou bastante confortável. Ainda estou votando sua resposta, no entanto, porque é uma boa solução. Vou manter isso em mente! Obrigado!?, +, {, |, (, and )
escape tenha um significado especial.Em
sed
vez disso, use isso funcionou para mim:fonte