Недавно я решил, что достаточно - достаточно научиться свободно использовать 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>
Для развлечения я подумал, что буду использовать watch
для мониторинга /proc/mdstat
в режиме реального времени, передачи его вывода в grep и отображения только приблизительного оставшегося времени.
Мой подход заключается в следующем:
watch cat /proc/mdstat | grep finish=\d+\.\d | grep \d+\.\d
Я озадачен тем, почему это не принесло результата. На самом деле, первое выражение grep не производит вывода, даже если кажется, что оно работает на Regex101 .
Что я делаю неправильно?
\d
и всегда указывать регулярное выражение внутриgrep
. Смотрите синтаксис регулярных выражений 'grep' .Ответы:
Если вы хотите использовать синтаксис регулярных выражений, вам нужен ключ -P с grep. Ознакомьтесь с ранее заданным вопросом: отличается ли синтаксис grep от регулярных выражений?
источник
grep
нет\d
выхода, вам нужно использовать[0-9]
вместо этого.+
необходимо экранировать без-E
выключателя.Это должно работать:
источник
-P
переключатель позволит мне использовать регулярные выражения так, как мне уже удобно. Я все еще поддерживаю ваш ответ, потому что это хорошее решение. Я буду иметь это в виду! Спасибо!?, +, {, |, (, and )
чтобы экранирование имело особое значение.Используйте
sed
вместо этого, это работает для меня:источник