Я создал это регулярное выражение:
'^CPU\s+LOAD\:\s+([0-9]{1,3})\s+Average\:\s+([0-9]{1,3}).?$'
, чтобы сопоставить и извлечь значения из моей строки:
"Загрузка процессора: 100 Среднее: 89"
, но иногдазначения будут недоступны, например:
"Загрузка процессора: средняя: 89"
"Загрузка процессора: средняя 100:"
"Загрузка процессора: средняя:"
и он не будет совпадать, но мне нужно, чтобы он возвращался как "", если значения отсутствуют.
Итак, я попробовал несколько вещей и думаю, что это:
'^CPU\s+LOAD\:\s+([[0-9]{1,3}]?)\s+Average\:\s+([[0-9]{1,3}]?).?$'
должно работать, но это не так.Это правильный синтаксис?
Это мой тестовый код, который хочет потерпеть неудачу. Ответ 1 Я перешел по ссылке, и, похоже, она работает на странице ссылки.
rx='^CPU\s+LOAD\:\s+(?:([0-9]{1,3})\s+)?Average:(?:\s+([0-9]{1,3}))?$'
line="CPU LOAD: 89 Average: 99"
if [[ $line =~ $rx ]]; then
printf "\n\n${BASH_REMATCH[1]} ${BASH_REMATCH[2]}\n\n"
else
printf "\n\nDidn't Match\n\n"
fi
Я обновил
rx='^CPU\ +LOAD\:\ +(([0-9]{1,3})\ +)?Average:(\ +([0-9]{1,3}))?$'
и "Загрузка процессора: 100 в среднем: 89" проходит
"Загрузка процессора: в среднем: 89" проходит
"Загрузка процессора: 100 в среднем:" не выполняется
Последние обновления требуют от меня:
printf "\n\n${BASH_REMATCH[1]} ${BASH_REMATCH[2]} ${BASH_REMATCH[3]} ${BASH_REMATCH[4]}\n\n"
Чтобы захватить все и поместить одно значение в
${BASH_REMATCH[1]} ${BASH_REMATCH[2]}
Спасибо за помощь Forth Bird.Это последний код, который работает для моих нужд.
rx='^CPU\s+LOAD:\s+(([0-9]{1,3})\s+)?Average:(\s+([0-9]{1,3}))?.?$'