Filtrando o Xth elemento em uma linha?

2

Por exemplo, eu quero ter somente o terceiro elemento em cada linha quando eu chamo:

xinput --list --short|grep "slave  pointer"

Eu recebo a saída:

⎜   ↳ 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)]

Gostaria de obter apenas os nomes "SynPS / 2 Synaptics TouchPad", ...

Eu vi em algum lugar uma solução com o awk e imprimir de alguma forma, mas não há uma solução mais simples para conseguir isso sem awk ou perl ou algo assim?

    
por rubo77 03.12.2012 / 14:24

2 respostas

1

Gawk é bastante simples para esse tipo de coisa, mas OK, você também pode usar cut :

xinput --list --short|grep "slave  pointer" | cut -f 1

Isso também incluirá o espaço principal e os caracteres . Se você precisar se livrar deles, tente isto:

xinput --list --short|grep "slave  pointer" | cut -f 1 | cut -d" " -f 5-
    
por 03.12.2012 / 14:32
1

Se fosse o terceiro elemento, seria "SynPS / 2", não "SynPS / 2 Synaptics TouchPad"

O melhor que você pode conseguir aqui é relatar o que está antes de id= , pois é a única coisa que pode identificar onde o nome do dispositivo termina.

xinput list | sed -n 's/^[ ⎜↳]*\(.*[^[:blank:]]\)[[:blank:]]*id=.*slave  pointer.*//p'

Ou com o GNU grep construído com suporte a PCRE ( -P option):

xinput list | grep -Po '[^ ⎜↳].*?(?=\s+id=.*slave  pointer)'
    
por 03.12.2012 / 15:03

Tags