2016-04-13 18 views
1

Regex'in grep içinde olmasına izin vermeden çok iyi değil ama ihtiyacım olana yakınım. Ben bu ids ayıklamak istediğim bu fare var (2 ids işaretçi ve bir klavye olarak basılmış) ve ben sadece işaretçi değerleri için kimlik numaralarını yazdırmak için grep yapamıyorum.Grep çıkışı yalnızca normal ifadelerle eşleşiyor

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

ama bu baskılar:

20 [slave pointer 21 [slave pointer

ben yaklaştım

⎡ 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)]

yolu bu komutu kullanarak aşağıdaki gibidir:

giriş metnidir

Yalnızca bunu 20 ve 21 yazdırabilir miyim? pointer gerekli çünkü sadece işaretçilerin kimliklerini istiyorum.

+0

Eğer regex ile zor bir zaman varsa , belki de 'xinput --list --short | grep -i razer | kesim -d = f2 | cut -d "" -f1 "daha düzdür. – Tomalak

cevap

2

Aslında eşleşen olmadan id sayılardan sonra pointer varlığını savunmak için sizin regex lookahead kullanabilirsiniz o:

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

Çıktı:

20 
21