从命令响应中提取数据并将其存储在变量中

时间:2011-02-05 19:30:22

标签: regex linux bash shell ubuntu

我想在启动过程中使用像这样的脚本禁用我的触控板

#!/bin/bash

# determine device id
ID=$(xinput list | grep -i touchpad)

# check output
echo $ID

# disable device identified by $ID
#xinput set-prop $ID "Device Enabled" 0</code>

基本上我想从命令结果中提取“12”(或设备具有的任何数字):

  • xinput list | grep -i touchpad
    ⎜⎜SynPS/ 2 Synaptics TouchPad id = 12 [从指针(2)]

并将其存储在变量$ ID中。

下一个命令将禁用该设备。

关于如何实现这一目标的任何建议?

谢谢,Udo

2 个答案:

答案 0 :(得分:1)

如果您知道xinput list的输出将始终将ID号作为第5个字段,请使用:

ID=$(xinput list | awk -F'[= ]' '/TouchPad/{print $5}')

如果您更喜欢关键字id=,以便它可以在线上的任何位置,那么请使用:

ID=$(xinput list | sed '/TouchPad/s/^.*id=\([0-9]*\).*$/\1/')

答案 1 :(得分:1)

GNU grep

ID=$(xinput list | grep -Poi '(?<=touchpad[[:blank:]]*id=)[0-9]+')

GNU sed

ID=$(xinput list | sed -n 's/.*touchpad[[:blank:]]*id=\([0-9]\+\)[[:blank:]]*.*/\1/Ip')