String

過濾行中的第 X 個元素?

  • December 3, 2012

例如,當我呼叫時,我只想獲取每行中的第三個元素:

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)'

引用自:https://unix.stackexchange.com/questions/57448