2009-09-10 52 views
3

我喜歡從wmctrl獲取窗口pid(僅firefox),我試過wmctrl -lp | grep Firefox | awk -F「」「{print $ 1}」但輸出不符合我的預期。請幫助。Awk&Grep問題

[email protected]# wmctrl -lp 
0x0160001b -1 6504 beer-laptop x-nautilus-desktop 
0x016000bd 0 6504 beer-laptop conference - File Browser 
0x03e00003 0 0    N/A XBMC Media Center 
0x03800081 0 7282 beer-laptop Xbmc_ConferenceWindow.py (~/.qlive/xbmc-conference) - gedit 
0x0352f117 0 6963 beer-laptop Ask a Question - Stack Overflow - Chromium 
0x01400040 -1 6503 beer-laptop Top Expanded Edge Panel 
0x01400003 -1 6503 beer-laptop Bottom Expanded Edge Panel 
0x03202deb 0 6866 beer-laptop [email protected]: ~/.qlive/conference 
0x012000c4 0 12134 beer-laptop Common threads: Awk by example, Part 1 - Mozilla Firefox 
[email protected]# wmctrl -lp | grep Firefox | awk -F" " "{print $1}" 
0x012000c4 0 12134 beer-laptop Common threads: Awk by example, Part 1 - Mozilla Firefox 
  • 在這種情況下,我寧願= 0x012000c4

回答

9
wmctrl -lp | awk '/Firefox/ { print $1 }' 

無需grep的。 Awk會這樣做。此外默認的字段分隔符是空格,所以不需要指定。另外,圍繞你的awk腳本使用單引號,這樣shell不會擴展$ 1。這就是你的腳本失敗的原因。 $ 1變成了什麼都沒有,你的awk動作變成了「打印」,它打印出整條線。

1

用單引號替換圍繞{print $1}的雙引號。這將防止殼擴大$1

+0

親愛的主席先生,有什麼是我的回答引起你downvote它的問題呢? – 2009-09-10 10:15:17

0

你可以這樣做:

wmctrl -lp | grep firefox | awk '{print $1}' 
+1

awk是與languge匹配的模式。不需要使用grep。 – dmckee 2009-09-10 13:16:05