Подтвердить что ты не робот

Bash: извлечение части строки

Скажем, у меня есть строка "Использована память: 19.54M" Как я извлечу из него 19,54? 19.54 будет часто меняться, поэтому мне нужно сохранить его в переменной и сравнить его со значением на следующей итерации.

Мне кажется, мне нужна комбинация grep и regex, но я никогда не понимал регулярное выражение.

4b9b3361

Ответ 1

Вероятно, вы хотите извлечь его, а не удалить. Вы можете использовать расширение параметра, чтобы извлечь значение:

var="Memory Used: 19.54M"
var=${var#*: }            # Remove everything up to a colon and space
var=${var%M}              # Remove the M at the end

Обратите внимание, что bash может сравнивать только целые числа, у него нет поддержки арифметики с плавающей запятой.

Ответ 2

Другие возможные решения:

С grep:

var="Memory Used: 19.54M"
var=`echo "$var" | grep -o "[0-9.]\+"`

С sed:

var="Memory Used: 19.54M"
var=`echo "$var" | sed 's/.*\ \([0-9\.]\+\).*/\1/g'`

С cut:

var="Memory Used: 19.54M"
var=`echo "$var" | cut -d ' ' -f 3 | cut -d 'M' -f 1`

С awk:

var="Memory Used: 19.54M"
var=`echo "$var" | awk -F'[M ]' '{print $4}'`

Ответ 3

Вы можете использовать поддержку bash regex с оператором =~ следующим образом:

var="Memory Used: 19.54M"
if [[ $var =~ Memory\ Used:\ (.+)M ]]; then
    echo ${BASH_REMATCH[1]}
fi

Откроется 19.54

Ответ 4

> echo "Memory Used: 19.54M" | perl -pe 's/\d+\.\d+//g'
Memory Used: M