В моем случае он уже был установлен, но мне просто нужно было сделать phpenmod mbstring, а затем apachectl graceful.
Есть много способов сделать это. Вот тот, который первый приходит мне на ум:
VALOREENABLE=`xinput list-props $ID | grep -i Enabled | grep -o "(.*)" | tr -d '()'`
VALORESENSE=`xinput list-props $ID | grep -i Profile | grep -o "(.*)" | tr -d '()'`
echo "Device Enabled (126): 1" | grep -P -o "[0-9]+" | head -1
echo помещает вашу строку в канал, который идет в grep, что является программой для применения регулярных выражений. Опция -P позволяет поведение типа PEARL (которое позволяет вам использовать +), а -o сообщает grep только выводить соответствующую часть строки. Каждое совпадение будет напечатано на новую строку, чтобы выбрать нужную строку. Поскольку мы хотим получить первое число, мы выберем первую строку. Если бы вас это интересовало, вы бы сделали head -2. Один из способов использования sed:
sed 's/.*(\([^)]*\)).*/\1/' <<<"Device Enabled (126): 1"
Результат:
126
, поэтому для вашего скрипта вы можете попробовать:
#!/bin/bash
ID=`xinput list | grep -i TouchPad | awk -F= '{ print $2}' | awk '{print $1}'`
VALOREENABLE=`xinput list-props $ID | grep -i Enabled |awk '{print $3}'`
#VALORESENSE=`xinput list-props $ID | grep -i Profile |awk '{print $3}'`
VALORESENSE=`xinput list-props $ID | grep -i Profile | awk '{print $4}' | sed 's/.*(\([^)]*\)).*/\1/' `
echo $VALORESENSE
Хорошо, я буду бросать в свой 2c, вы можете сделать это напрямую с awk
ID=`xinput list | grep -i TouchPad | awk -F= '{ print $2}' | awk '{print $1}'`
VALOREENABLE=`xinput list-props $ID | awk '/Enabled/ {print substr ($3, 2, 3) }'`
VALORESENSE=`xinput list-props $ID | awk '/Profile/ {print substr ($3, 2, 3) }'
Оболочка может это сделать:
str="Device Enabled (126): 1"
old_IFS=$IFS
IFS="()"
words=($str)
number=${words[1]}
Или, если вам действительно нравится использовать awk, установите разделитель полей как в скобках
number=$(awk -F '[()]' '{print $2}' <<< "Device Enabled (126): 1")
. Используя ваш пример кода , Я бы написал:
ID=$(xinput list | awk -F= '/TouchPad/ {split($2, a, /[[:space:]]\+/); print a[1]}')
PROPS=$(xinput list-props $ID)
VALOREENABLE=$(awk -F '[()]' '/Enabled/ '{print $2}' <<< "$PROPS")
VALORESENSE=$(awk -F '[()]' '/Profile/ '{print $2}' <<< "$PROPS")
Извлечение идентификатора может быть упрощено как таковое (обратите внимание на использование $() вместо обратных ссылок):
ID=$(xinput list | awk '/TouchPad/{sub(/^.*id=/,"");sub(/\[.*/,"");print}')
Лично я использовал бы perl при извлечении чисел:
VALOREENABLE=$(xinput list-props $ID | perl -ne 's/.*\((.*)\).*/$1/ and print if /Enabled/' )
VALORESENSE=$(xinput list-props $ID | perl -ne 's/.*\((.*)\).*/$1/ and print if /Profile/' )