Как заставить 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%