Para encurtar a história, aqui está o comando que você quer:
foo="$(xinput list | grep -F 'Stick' | grep -Po '(?<=id=)\d\d?')"
Segue uma explicação mais detalhada.
Você deve ser capaz de fazer o que quiser com grep
e uma expressão regular que inclua uma declaração de aprovação . O ingrediente principal é a seguinte expressão grep
:
grep -Po '(?<=id=)\d\d?'
Isso irá corresponder substrings que começam com id=
e são seguidas por um ou dois dígitos, mas retornarão apenas os dígitos e não o prefixo id=
.
Veja como você pode testar isso:
echo "id=11" | grep -Po '(?<=id=)\d\d?'
Isso produz 11
como sua saída. Aplicar isso ao seu snippet de código gera o seguinte:
foo="$(xinput list | grep -F 'Stick' | grep -Po '(?<=id=)\d\d?')"
Como segundo teste, suponha que colocamos seus dados de exemplo no arquivo data.txt
:
# data.txt
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ AlpsPS/2 ALPS DualPoint TouchPad id=10 [slave pointer (2)]
⎜ ↳ AlpsPS/2 ALPS DualPoint Stick id=11 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Video Bus id=7 [slave keyboard (3)]
↳ Power Button id=8 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=9 [slave keyboard (3)]
↳ Toshiba input device id=12 [slave keyboard (3)]
↳ TOSHIBA Web Camera - FHD id=13 [slave keyboard (3)]
Em seguida, execute o seguinte comando:
cat data.txt | grep -F 'Stick' | grep -Po '(?<=id=)\d\d?'
Isso produz 11
como saída.