Как заставить GREP выбирать только числовые значения? - PullRequest
19 голосов
/ 06 декабря 2011

Я использую команду df в скрипте bash:

df . -B MB | tail -1 | awk {'print $4'} | grep  .[0-9]*

Этот скрипт возвращает:

99%

Но мне нужны только цифры (чтобы сделать следующее сравнение). Если я использую регулярное выражение grep без точки:

df . -B MB | tail -1 | awk {'print $4'} | grep  .[0-9]*

Я ничего не получаю. Как исправить?

Ответы [ 6 ]

42 голосов
/ 06 декабря 2011

Если вы попытаетесь:

 echo "99%" |grep -o '[0-9]*'

Возвращает:

99

Вот подробности о -o (или --only-matching флаг) работает от страница руководства grep .

Печать только совпадающих (непустых) частей совпадающих строк, каждая из которых находится на отдельной выходной строке.В выходных строках используются те же разделители, что и для ввода, и разделители являются нулевыми байтами, если также используется -z (--null-data) (см. Другие параметры ).

9 голосов
/ 06 декабря 2011

grep напечатает любые строки , соответствующие указанному вами шаблону. Если вы хотите напечатать только ту часть строки, которая соответствует шаблону, вы можете передать параметр -o :

-о, -подходящий Печатайте только совпадающие (непустые) части совпадающей строки, каждая из которых находится на отдельной выходной строке.

Как это:

echo 'Here is a line mentioning 99% somewhere' | grep -o '[0-9]+'
1 голос
/ 23 декабря 2017

Не используйте больше команд, чем необходимо, оставьте хвост, grep и cut. Вы можете сделать это только с (простым) awk

PS: показывать размер блока только для печати немного глупо ;-) Так что оставьте также "-B MB"

df. | awk -F '[ несколько разделителей полей ]' '$ NF == " Последнее поле должно быть точно -> смонтированный фрагмент " {print $ (NF- число из последнего поля )} '

в вашем случае используйте:

df . |awk -F'[ %]' '$NF=="/" {print $(NF-2)}'

выход: 81

Если вы хотите показать символ процента, вы можете оставить -F '[%]', и ваше поле печати переместится на 1 поле назад

df . |awk '$NF=="/" {print $(NF-1)}'

выход: 81%

1 голос
/ 19 октября 2017
function getPercentUsed() {
    $sys = system("df -h /dev/sda6 --output=pcent | grep -o '[0-9]*'", $val);
    return $val[0];
}
1 голос
/ 06 декабря 2011

Нет необходимости использовать grep здесь, попробуйте это:

df . -B MB | tail -1 | awk {'print substr($5, 1, length($5)-1)'}
1 голос
/ 06 декабря 2011

Как насчет:

df . -B MB | tail -1 | awk {'print $4'} | cut -d'%' -f1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...