Как заставить GREP выбирать только числовые значения?

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

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

Этот script возвращает:

99%

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

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

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

Ответы

Ответ 1

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

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

Он возвращает:

99

Здесь информация о флаге -o (или --only-matching) работает с grep.

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

Ответ 2

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

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

Вот так:

echo 'Here is a line mentioning 99% somewhere' | grep -o '[0-9]+'

Ответ 3

Как насчет:

df . -B MB | tail -1 | awk {'print $4'} | cut -d'%' -f1

Ответ 4

Не нужно использовать grep здесь, попробуйте следующее:

df . -B MB | tail -1 | awk {'print substr($5, 1, length($5)-1)'}

Ответ 5

function getPercentUsed() {
    $sys = system("df -h /dev/sda6 --output=pcent | grep -o '[0-9]*'", $val);
    return $val[0];
}

Ответ 6

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

PS: предоставление размера блока en print только de persentage немного глупо;-) Так что оставляйте также "-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%