在bash中提取硬件设备的数值[重复]

问题描述 投票:0回答:2

来自 xinput 的一行说 ⎜ ↳ ELAN0518:01 04F3:31FC 触摸板 id=11 [从指针 (2)] 我想将紧随“id=”部分之后的数字获取到变量中。

提议的解决方案于 6 年前发布于此处: 使用 bash 子字符串并分配给变量 不起作用,另一个建议的解决方案...

yourvar=$(xinput  |grep -oP 'Touchpad.*id=\K[^ ]+')
echo $yourvar

几乎可以工作,但留下尾随字符串,输出:“11 [slave”

如何调整grep命令只抓取数字?

bash grep
2个回答
1
投票

您正在使用

[^ ]+
,它不匹配空格。如果有一个选项卡,你会匹配太多。

您可以使用例如

\S+
来匹配 1 个以上非空白字符:

Touchpad.*id=\K\S+

或者将 1 个或多个数字匹配到更精确的模式:

Touchpad.*id=\K\d+

0
投票

不要使用 grep。使用 sed。

xinput | sed -n -e 's/.*Touchpad.*id=\([0-9]*\).*/\1/'p
© www.soinside.com 2019 - 2024. All rights reserved.