2017-06-28 48 views
0

我執行以下命令:子使用bash和分配給一個變量

xinput | grep Razer 

輸出

​​

我怎麼能得到的ID,將其分配給一個變量,這樣我就可以稍後在腳本中重用它?該ID正在改變。

回答

2

可以通過管道將你的命令的sed:

yourvar=$(xinput | sed '/Razer/s/.*id=\([0-9]*\).*/\1/') 
  • /Razer/:當含有Razer行發現
  • s/.*id=\([0-9]*\).*/\1/:抓住id的值,並使用反向引用打印。
1

grep溶液:在這裏,如果任何行包含雷蛇隨後ID則ID被打印。這裏使用perl正則表達式使用-p標誌grep命令。 \K表示忽略它的所有內容。

xinput |grep -oP 'Razer.*id=\K[^ ]+' 
12 

使用gawk的匹配功能:

awk '/Razer/{match($0,/id=([^ ]+)/,a);print a[1]}' 
12 
0

,如果你已經GNU AWKgawk你可以做下面的了。

id=$(xinput | awk '/Razer/{printf "%s",gensub(/^.*id=[[:digit:]]*).*$/,"\\1",$0)}') 
+1

你好,你想改變你的正則表達式爲'/^.* id =([[:digit:]] *)。* $ /'? –

+0

@PS:你是對的,當我從我的虛擬機複製命令時,發生'='修剪。 – sjsam

相關問題