String
過濾行中的第 X 個元素?
例如,當我呼叫時,我只想獲取每行中的第三個元素:
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
?
Gawk對於這種事情非常簡單,但是好的,你也可以使用
cut
:xinput --list --short|grep "slave pointer" | cut -f 1
這還將包括前導空格和
↳
字元。如果你需要擺脫這些,試試這個:xinput --list --short|grep "slave pointer" | cut -f 1 | cut -d" " -f 5-
如果是第三個元素,那就是“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)'