Grep для подстроки из конвейерного вывода смотри за утверждением - PullRequest
1 голос
/ 07 октября 2019

Я использую xinput для получения следующих данных:

⎡ 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)]
    ↳ Video Bus                                 id=8    [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=9    [slave  keyboard (3)]
    ↳ ThinkPad Extra Buttons                    id=12   [slave  keyboard (3)]
    ↳ Integrated Camera: Integrated C           id=13   [slave  keyboard (3)]

Я собираюсь получить идентификатор AlpsPS / 2 ALPS DualPoint Stick только в одну строку . Итак, я попробовал следующее:

xinput | grep -Po "(?<=DualPoint Stick\s.+id=())"
grep: lookbehind assertion is not fixed length

Что я делаю не так?

1 Ответ

2 голосов
/ 07 октября 2019

С GNU grep:

xinput | grep -Po 'AlpsPS/2 ALPS DualPoint Stick *id=\K[0-9]+'

Вывод:

11

См .: Что делает grep -Po '… \ K…'? Как еще можно достичь этого эффекта?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...