例如,我想得到只有第三个元素当我打电话时,每一行:
xinput --list --short|grep "slave pointer"
我得到输出:
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ SynPS/2 Synaptics TouchPad id=11 [slave pointer (2)]
⎜ ↳ MCE IR Keyboard/Mouse (ite-cir) id=12 [slave pointer (2)]
⎜ ↳ Logitech Unifying Device. Wireless PID:101a id=14 [slave pointer (2)]
我只想获取诸如“SynPS/2 Synaptics TouchPad”之类的名称,...
我在某处看到了一个带有 awk 和 print 的解决方案,但是没有更简单的解决方案来实现这一点没有 awk
或perl
这样的?
答案1
呆呆是对于这种事情来说非常简单,但是好的,你也可以使用cut
:
xinput --list --short|grep "slave pointer" | cut -f 1
这还包括前导空格和↳
字符。如果您需要摆脱这些,请尝试以下操作:
xinput --list --short|grep "slave pointer" | cut -f 1 | cut -d" " -f 5-
答案2
如果是第三个元素,则为“SynPS/2”,而不是“SynPS/2 Synaptics TouchPad”
您在这里可以实现的最好结果是报告之前的内容,id=
因为它是唯一可以识别设备名称结束位置的内容。
xinput list | sed -n 's/^[ ⎜↳]*\(.*[^[:blank:]]\)[[:blank:]]*id=.*slave pointer.*/\1/p'
或者使用带有 PCRE 支持(-P
选项)构建的 GNU grep:
xinput list | grep -Po '[^ ⎜↳].*?(?=\s+id=.*slave pointer)'