Get ethernet connection id from nmcli output

时间:2017-10-12 10:15:00

标签: shell ubuntu

I am trying to get the ethernet connection ids from nmcli output as below:

user@user-desktop:~/$ nmcli c
NAME                UUID                                  TYPE             DEVICE 
Wi-Fi connection 1  fb03ea1d-7aa5-48f2-b94d-c7f0f8249a7e  802-11-wireless  wlp2s0 
Wired connection 1  4091d179-ccde-34be-938e-5bc792fd1e1b  802-3-ethernet   eno1

I would like to get fb03ea1d-7aa5-48f2-b94d-c7f0f8249a7e and 4091d179-ccde-34be-938e-5bc792fd1e1b. For that I used the command below:

user@user-desktop:~/$nmcli connection | awk '{print $4}' | sed 1,1d
fb03ea1d-7aa5-48f2-b94d-c7f0f8249a7e
4091d179-ccde-34be-938e-5bc792fd1e1b

The command is working fine. But when the connection name is "Wi-Fi_connection_1" for instance, the command will not give the expected values.

Is there any generic way to do this properly ?

3 个答案:

答案 0 :(得分:0)

根据我的评论,(现在包含在这里)

命令运行命令
^I

如果您看到围绕UUID的nmcli c | awk -F"\t" '{print $2}' 个字符,那么

nmcli

应该有效。

否则,可能不是你希望的单行,但是这将处理cat getUUID.awk # given as intput # NAME UUID TYPE DEVICE # Wi-Fi connection 1 fb03ea1d-7aa5-48f2-b94d-c7f0f8249a7e 802-11-wireless wlp2s0 # Wired connection 1 4091d179-ccde-34be-938e-5bc792fd1e1b 802-3-ethernet eno1 # NR==1{ start=end=$0 sub(/UUID.*$/,"",start) startL=length(start)+1 sub(/TYPE.*$/,"",end) endL=length(end)-startL #dbg print "#dbg:startL=" startL "\tendL="endL } NR!=1{ print substr($0,startL,endL) } # for output # fb03ea1d-7aa5-48f2-b94d-c7f0f8249a7e # 4091d179-ccde-34be-938e-5bc792fd1e1b 可能会给你的输出调整大小。

nmcli c | awk -f getUUID.awk

将其作为

运行
nmcli c | awk -f 'NR==1{ st=end=$0; sub(/UUID.*$/,"",st);stL=length(st)+1;sub(/TYPE.*$/,"",end); endL=length(end)-stL} NR!=1{print substr($0,stL,endL)}'

哦,这里它是一个单行(没有评论)

nmcli

我目前无法访问$test = [1, 2, 3]; 的系统,因此我无法对此进行全面测试。

IHTH

答案 1 :(得分:0)

你的命令的问题是awk使用空格字符作为字段分隔符,但连接名称中可能有空格,也可能没有空格。

nmcli命令有一个--get-values(-g)选项,您可以使用它来获取您感兴趣的字段。

仅获取连接名称:

nmcli -g name con

仅获取连接uuids:

nmcli -g uuid con

答案 2 :(得分:0)

您不需要awk,因为nmcli已经提供了将所需输出呈现给脚本的方法。出于某种原因,@ mdepot给出的答案对我不起作用(尽管确实在手册页中提到了-g--get-values选项,但我的nmcli版本无法识别该选项) )。

nmcli -t -f UUID con

将提供您期望的输出。 -t选项(--terse)使输出易于被脚本读取,而-f选项(--fields)则希望将您感兴趣的字段列表作为参数。