2009-09-10 80 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