簡體   English   中英

Grep僅輸出正則表達式匹配

[英]Grep output only the regex matches

使用regex不太好,更不用說grep內的regex了,但是我很接近我的需要。 我有一只想要提取其ID的鼠標(它有2個ID作為指針打印,一個ID作為鍵盤打印),而且我不能讓grep只打印指針值的ID號。

輸入文本如下:

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

我接近的方法是使用以下命令:

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

但這打印:

20 [slave pointer 21 [slave pointer

我怎樣才能只打印2021 需要pointer ,因為我只想要指針的ID。

您可以在正則表達式中使用前瞻性來聲明id號后是否存在pointer ,而無需實際匹配它:

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

輸出:

20
21

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM