将两行的一部分提取为一个

时间:2018-09-26 00:09:36

标签: bash awk sed grep

我想要一个可以转换此输入的命令行:

    capability: ESS Privacy ShortPreamble ShortSlotTime (0x0431)
    signal: -68.00 dBm
    last seen: 0 ms ago
    SSID: ENH202.FW
    Supported rates: 1.0* 2.0* 5.5* 11.0* 6.0 9.0 12.0 18.0

到此输出行:

SSID: ENH202.FW  -68.00 dBm

这受以下读取可用wifi网络的命令的启发:

sudo iw dev wlan0 scan | grep SSID

通过打印包含“ SSID”的单行的每次出现来列出所有网络。我希望通过相同的扫描来给出每个SSID的信号强度。

是否可以使用命令行工具获取包含信号强度的列表?

2 个答案:

答案 0 :(得分:1)

sed命令可以做到:

sed -n -e '/signal:/h' -e '/SSID:/{G;s/signal://;s/\n//;p}' <inputfile>

说明:

-n标志告诉sed不要打印行。

第一个-e表达式在其中找到带有“ signal:”的行,并将其放在保留空间中。第二个命令在其中找到一行带有“ SSID:”的行,G将保留空间添加到此行,s/signal://删除“ signal:”部分,而s/\n//删除回车符。最后,p告诉sed打印图案空间。

答案 1 :(得分:1)

这将在到达信号线时设置变量st的值,然后在SSID线之后打印。

sudo iw dev wlan0 scan | awk '/signal:/{st=$2$3} /SSID:/{print $0" "st}'