Awk和Grep的问题

3
我希望从wmctrl中获取窗口pid(仅限Firefox),我尝试了wmctrl -lp | grep Firefox | awk -F" " "{print $1}",但输出与我的预期不符。请帮助。
beer@beer-laptop# 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 beer@beer-laptop: ~/.qlive/conference
0x012000c4  0 12134  beer-laptop Common threads: Awk by example, Part 1 - Mozilla Firefox
beer@beer-laptop# wmctrl -lp | grep Firefox | awk -F"  " "{print $1}"
0x012000c4  0 12134  beer-laptop Common threads: Awk by example, Part 1 - Mozilla Firefox

在这种情况下,我的首选项= 0x012000c4。
4个回答

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

不需要使用grep。可以使用Awk。此外,字段分隔符的默认值是空格,因此不需要指定。同时,在awk脚本周围使用单引号,这样shell就不会展开$1。这就是为什么你的脚本失败了。$1变成了空,awk操作变成了“print”,打印出整行。

1

用单引号替换 {print $1} 周围的双引号,这将防止 shell 展开 $1


尊敬的先生,我回答的哪个问题导致您给它点了踩呢? - lutz

1

awk '{print $1}'


0

你可以只做:

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

1
Awk是一种模式匹配语言,无需使用grep。 - dmckee --- ex-moderator kitten

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接