Bash 将两行的部分提取为一行
我想要一个可以转换此输入的命令行:Bash 将两行的部分提取为一行,bash,awk,sed,grep,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 这是受
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的信号强度
是否有方法使用命令行工具获取包含信号强度的列表 sed命令可以做到这一点:
sed -n -e '/signal:/h' -e '/SSID:/{G;s/signal://;s/\n//;p}' <inputfile>
sed-n-e'/signal:/h'-e'/SSID://{G;s/signal://;s/\n//;p}'
说明:
-n
标志告诉sed不要打印行
第一个
-e
表达式找到包含“signal:”的行,并将其放入保持空间。第二行找到一行,其中包含“SSID:”,G
将保留空间追加到此行,s/signal://
删除“signal:”部分,s/\n/
删除回车符。最后,p
告诉sed打印模式空间。当到达信号线时,设置变量st
的值,然后在SSID线后打印
sudo iw dev wlan0 scan | awk '/signal:/{st=$2$3} /SSID:/{print $0" "st}'
到目前为止你试过什么?你有什么问题?为我们提供一个。考虑到您包含的标记,我希望在您的问题中看到bash、awk和sed代码∞ 对问题中代码的改进,它是GNU专用的,因此在*BSD、macOS等中不起作用。您可以在
p
后面加一个分号,使它至少与BSD和macOS兼容。我对linux向导表示尊敬。