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 ?
答案 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)则希望将您感兴趣的字段列表作为参数。