【问题标题】:Extracting data from a command response and store it in a variable从命令响应中提取数据并将其存储在变量中
【发布时间】:2011-06-22 00:04:43
【问题描述】:

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

#!/bin/bash

# 确定设备ID
ID=$(xinput list | grep -i touchpad)

# 检查输出
回显 $ID

# 禁用由 $ID 标识的设备
#xinput set-prop $ID "Device Enabled" 0

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

  • xinput 列表 | grep -i 触摸板
    ⎜ ↳ SynPS/2 Synaptics TouchPad id=12 [从属指针 (2)]

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

下一个命令将禁用设备。

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

谢谢,乌多

【问题讨论】:

    标签: regex linux bash shell ubuntu


    【解决方案1】:

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

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

    如果您宁愿关闭单词 id= 以便它可以在线上的任何位置,然后使用:

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

    【讨论】:

    • xinput 列表 | awk -F'[= ]' '/TouchPad/{print $5}' 输出 SynPS/2 -> 更改参数不会给我 12... 第二个命令在小编辑后起作用;)
    • @udo 我拒绝了您的编辑,但同时其他人批准了它。最好使用您最终使用的代码来编辑您的问题,而不是修改/编辑答案。
    • @belisarius:可能 SiegeX 批准了它。如果没有此编辑,代码将无法正常工作。
    【解决方案2】:

    GNU grep:

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

    GNUsed:

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

    【讨论】:

    • @udo: echo 'SynPS/2 Synaptics TouchPad id=12 [slave pointer (2)]' | grep -Poi '(?&lt;=touchpad id=)[0-9]+'echo 'SynPS/2 Synaptics TouchPad id=12 [slave pointer (2)]' | sed -n 's/.*touchpad id=\([0-9]\+\) .*/\1/Ip' 都给我“12”。
    • 是的,已确认。但是当我使用 xinput list | grep -Poi '(?
    • @udo:我刚刚检查并xinput 输出选项卡。我已经更改了答案以反映这一点。
    猜你喜欢
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    • 2017-01-09
    • 1970-01-01
    • 1970-01-01
    • 2020-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多