2016-04-13 9 views
1

正規表現ではあまりよくありませんが、grep内では正規表現はしませんが、私は必要なものに近いです。私はこのマウスを私はそれがids(それはポインタとして2つのidsとキーボードとして印刷されている)を抽出したいと私はポインタ値のID番号を印刷するだけgrepにすることはできません。Grep出力正規表現だけが一致する

xinput --list --short | grep -oP 'Razer.*id=\K([0-9]+)(.*?)pointer'

が、この版画:

20 [slave pointer 21 [slave pointer

私は親しま

⎡ Virtual core pointer id=2 [master pointer (3)] ⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)] ⎜ ↳ ELAN Touchscreen id=12 [slave pointer (2)] ⎜ ↳ DLL06E4:01 06CB:7A13 Touchpad id=13 [slave pointer (2)] ⎜ ↳ Logitech Gaming Keyboard G910 id=17 [slave pointer (2)] ⎜ ↳ Razer Razer DeathAdder Chroma id=20 [slave pointer (2)] ⎜ ↳ Razer Razer DeathAdder Chroma id=21 [slave pointer (2)] ⎜ ↳ Logitech Logitech G633 Gaming Headset id=22 [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)] ↳ Power Button id=9 [slave keyboard (3)] ↳ Sleep Button id=10 [slave keyboard (3)] ↳ Integrated_Webcam_HD id=11 [slave keyboard (3)] ↳ AT Translated Set 2 keyboard id=14 [slave keyboard (3)] ↳ Dell WMI hotkeys id=16 [slave keyboard (3)] ↳ Logitech Gaming Keyboard G910 id=18 [slave keyboard (3)] ↳ Razer Razer DeathAdder Chroma id=19 [slave keyboard (3)]

の方法は、このコマンドを使用している次のよう

入力テキストがあります

2021だけを印刷するにはどうしたらいいですか?ポインタのIDだけが必要なので、pointerが必要です。

+0

を使用すると、正規表現で苦労している場合、おそらく 'xinput --list --short | grep -i razer |カット-d = f2 | cut -d "" -f1 "はより単純です。 – Tomalak

答えて

2

あなたが実際にそれを照合することなく、あなたのid数字の後にpointerの存在を主張するために、あなたの正規表現に先読みを使用することができます。

xinput --list --short | grep -oP 'Razer.*id=\K(\d+)(?=.*pointer)' file 

出力:

20 
21 
関連する問題