2015-07-08 5 views
0

Мой код выглядит так:извлечение числа из строки в Баш скрипт

  • xinput list | grep TouchPad

тогда я получаю:

  • ⎜ ↳ SynPS/2 Synaptics TouchPad id=14 [slave pointer (2)]

сохраняю этот вывод для строковой переменной таким образом:

  • touchpad=$(xinput list | grep TouchPad)

Итак, мой вопрос, как я могу сохранить идентификационный номер 14, как в переменную число в сценарии баш? Мне нужно использовать этот номер, чтобы отключить сенсорную панель этим:

  • xinput set-prop 14 "Device Enabled" 0

мне нужно автоматически запускать код, так что число 14 в приведенном выше коде должно исходить из предыдущего кода.

Спасибо.

ответ

0

Использование Bash Parameter Expansion:

var='SynPS/2 Synaptics TouchPad id=14 [slave pointer (2)]' 
num="${var/*TouchPad id=/}" # replaces ...TouchPad id= with empty string 
num="${num/ */}"   # replaces space... with empty string 
echo "$num" 

Или

num="${var#*TouchPad id=}" # deletes ...TouchPad id= from var and assigns the remaining to num 
num="${num%% *}"   # deletes space... from num 

Или с помощью Grep с Perl регулярное выражение:

echo "$var" |grep -oP "(?<=TouchPad id=)\d+" 
0
touchpad='SynPS/2 Synaptics TouchPad id=14 [slave pointer (2)]' 
sed -r 's~.*TouchPad id=([0-9]+).*~\1~' <<< "$touchpad" 
14 
1
num=$(echo " SynPS/2 Synaptics TouchPad id=14 [slave pointer (2)]" | grep -o '\d\d') 
echo $num 

ВЫХОД

14 
0

В вашем Баш скрипт:

regex="id=([0-9]+)" 
[[ $touchpad =~ $regex ]] 
id=${BASH_REMATCH[1]} 
if [ -z $id ]; then 
    echo "Couldn't parse id for $touchpad" 
else 
    xinput set-prop $id "Device Enabled" 0 
fi 
Смежные вопросы