2

我正在使用此命令来检索连接到接入点的客户端的信号平均功率:

iw dev wlan0 station dump | grep -E 'Station|signal avg': 

我得到以下信息:

“my_MAC_Address”(在 wlan0 上)

信号平均值: -46 dBm

粗体字是我与 grep 匹配的内容,我只想得到匹配后的单词,即 MAC 地址和数字 -46。我一直在玩 awk 但没有成功。希望你能帮我!

4

3 回答 3

8
iw dev wlan0 station dump | grep -Po '(?<=Station\s|signal avg:\s)[^\s]*'

此正则表达式使用所谓的lookbehind语法。你可以在这里阅读

示例输出:

00:11:22:33:44:55
-40

更新:

感谢您投票赞成这个答案。现在我知道另一种解决方案:

iw dev wlan0 station dump | grep -Po '(Station\s|signal avg:\s)\K[^\s]*'

这实际上是上述解决方案的简写。\K基本上意味着“在它发生之前忘记一切”。

于 2013-09-10T00:19:16.477 回答
2

您也可以使用两个 grep 来执行此操作

iw dev wlan0 station dump | grep -E 'Station|signal avg' | grep -o [^'Station|signalavg'].*
于 2014-03-07T04:18:30.190 回答
0

一种可能的 awk 解决方案可以快速和松散地使用空格:

... | awk '$1 == "Station" { print $2 } 
           $1 $2 == "signalavg:" { print $3 }' 
于 2013-09-10T02:49:43.040 回答