Bash: извлечение части строки
Скажем, у меня есть строка "Использована память: 19.54M"
Как я извлечу из него 19,54?
19.54 будет часто меняться, поэтому мне нужно сохранить его в переменной и сравнить его со значением на следующей итерации.
Мне кажется, мне нужна комбинация grep и regex, но я никогда не понимал регулярное выражение.
Ответы
Ответ 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