ГРЭП продолжительность времени от выхода пинг

Обновить

December 2018

Просмотры

134 раз

3

Я хотел написать код Баша, который только дает мне время на пингах. Я пробовал с этим:

ping -4 www.google.com | grep -oh "time=* ms"

Но я знаю , что это не дало бы мне только время , но я думал , что это позволит сократить его time=30 ms, например. Это не дает мне выход хотя.

2 ответы

3

Используйте режим PCRE на GNU grep, позволяя -Pфлаг, чтобы извлечь значение миллисекунды в одиночку

ping -4 www.google.com | grep -oP ".*time=\K\d+" 

где \Kпоследовательность символов означает

\ K: Эта последовательность сбрасывает начальную точку отчётного матча. Все ранее согласованные символы не включены в окончательной согласованной последовательности.

Или вы могли бы избавиться от каких - либо GNU-изма инструментов , необходимых и просто использовать POSIX , sedчтобы сделать

ping -4 www.google.com | sed -n 's/.*time=\([[:digit:]]*\).*/\1/p'
0

Регулярное выражение, которое вы используете, не правильный.

Вот регулярное выражение Perl , который делает то , что вы хотите. Обратите внимание на использование одиночных кавычек , который подавляет случайное расширение любого , *которые могли бы быть в регулярном выражении. \d+соответствует 1 или более знаков после запятой.

echo "time=12 ms" | grep -oh --perl-regex 'time=\d+ ms'
time=12 ms

-hМожно оставить в этом случае тоже.

Лично я всегда использовать Perl регулярное выражение , как только он попадает в какой - либо небольшой комплекс. По умолчанию grepэто «простое регулярное выражение» . Вы можете также «расширенные регулярные выражения» с помощью --extended-regexpопции. Смотрите также POSIX базовый и расширенный в Википедии.