You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Shell脚本中提取nmcli输出的Wi-Fi SECURITY字段?

从nmcli提取SSID对应的SECURITY字段的实用方法

没问题,我来帮你搞定这个需求!其实nmcli本身就支持更易脚本处理的输出格式,不用依赖带分隔线的表格模式(也就是去掉-p参数),这样提取字段会简单很多。下面给你两种靠谱的实现方式:

方法1:用简洁模式(Terse Mode)+ awk(推荐)

这种方式直接指定nmcli只输出你需要的SSID和SECURITY字段,输出格式紧凑,完全不用担心SSID带空格的问题:

nmcli -t -f SSID,SECURITY dev wifi list | awk -F ':' '{print "SSID: " $1 " | SECURITY: " $2}'

参数解释:

  • -t:启用terse模式,输出内容用冒号分隔,没有多余的格式(比如表格线、重复表头),非常适合脚本解析
  • -f SSID,SECURITY:指定只输出SSID和SECURITY两个字段,减少不必要的数据处理
  • awk -F ':':用冒号作为分隔符,直接提取第一列(SSID)和第二列(SECURITY)

方法2:处理完整表格输出(适合需要保留其他字段的场景)

如果你需要保留nmcli的完整表格输出,再从中提取目标字段,可以用awk处理SSID含空格的情况(因为SSID可能包含空格,不能直接用固定列数提取):

nmcli dev wifi list | awk 'NR>1 {
    # 从第3列到倒数第2列拼接成SSID(跳过IN-USE、BSSID,直到BARS列之前)
    ssid = ""
    for(i=3; i<=NF-1; i++) {
        ssid = ssid $i " "
    }
    # 去掉末尾多余的空格,然后输出SSID和最后一列的SECURITY
    print "SSID: " substr(ssid, 1, length(ssid)-1) " | SECURITY: " $NF
}'

说明:

  • NR>1:跳过第一行的表头
  • 循环拼接SSID:因为nmcli的表格列顺序是IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY,所以SSID从第3列开始,到倒数第2列(BARS)结束,最后一列就是SECURITY

额外提示:避免用-p参数

-p参数是让nmcli输出带分页的格式化表格,会包含大量分隔线和重复表头,反而增加解析难度,所以脚本里建议直接去掉这个参数,用上面的两种方式更高效。

内容的提问来源于stack exchange,提问作者flowero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:21:52