grep匹配后得到下一个单词

时间:2013-09-10 00:00:25

标签: bash awk grep

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

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

我收到了以下信息:

“my_MAC_Address”(在wlan0上)

信号平均: -46 dBm

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

3 个答案:

答案 0 :(得分:7)

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

此regexp使用所谓的lookbehind语法。你可以阅读它here

示例输出:

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

更新

感谢您对此答案进行投票。现在我知道另一个解决方案:

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

这实际上是上述解决方案的简写。 \K基本上意味着&#34;在它出现之前忘记一切&#34;。

答案 1 :(得分:2)

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

iw dev wlan0 station dump | grep -E 'Station|signal avg' | grep -o [^'Station|signalavg'].*

答案 2 :(得分:0)

一个可能的解决方案是使用空格快速松散地播放:

... | awk '$1 == "Station" { print $2 } 
           $1 $2 == "signalavg:" { print $3 }'