如何在bash中从nmcli输出中提取单个字段?

如何在bash中从nmcli输出中提取单个字段?,bash,shell,Bash,Shell,我想提取以下命令的结果以将其存储在变量中: nmcli connection show 提取的结果应为ens18。相反,大致如下所示: NAME UUID TYPE DEVICE ens18 XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX 802-3-ethernet ens18 …如下面的图形屏幕截图所示: 我尝试了一会儿,但不知道如何解决这个问题。由于您只有一个结果,您可以简

我想提取以下命令的结果以将其存储在变量中:

nmcli connection show
提取的结果应为
ens18
。相反,大致如下所示:

NAME  UUID                                 TYPE           DEVICE
ens18 XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX 802-3-ethernet ens18
…如下面的图形屏幕截图所示:


我尝试了一会儿,但不知道如何解决这个问题。

由于您只有一个结果,您可以简单地执行以下操作:

VAR=$(nmcli -g name connection show)
如果获得更多结果,可以使用
head
tail
命令

活动的始终是第一个,因此要在有多个结果运行时获取活动的:

VAR=$(nmcli -g name connection show | head -1)

  • VAR
    是变量名
  • $(…)
    是命令替换
  • 使用
    -g name
    获取所需字段的值

这意味着运行该命令并将结果放入
VAR

中,因为您只有一个结果,您只需执行以下操作:

VAR=$(nmcli -g name connection show)
如果获得更多结果,可以使用
head
tail
命令

活动的始终是第一个,因此要在有多个结果运行时获取活动的:

VAR=$(nmcli -g name connection show | head -1)

  • VAR
    是变量名
  • $(…)
    是命令替换
  • 使用
    -g name
    获取所需字段的值

这意味着运行该命令并将结果放入
VAR

中,如果nmcli命令的输出以制表符分隔,则可以执行此操作

使用awk:

variable=$(nmcli connection show | awk -F'\t' '{print $4}' | tail -1)
带切口:

variable=$(nmcli connection show | cut -f4 | tail -1)

如果nmcli命令的输出以制表符分隔,则可以执行此操作

使用awk:

variable=$(nmcli connection show | awk -F'\t' '{print $4}' | tail -1)
带切口:

variable=$(nmcli connection show | cut -f4 | tail -1)

也许,这会对你有所帮助

var=$(nmcli connection show|grep -v NAME| awk -F " " '{print $1}')

这可能对你有所帮助

var=$(nmcli connection show|grep -v NAME| awk -F " " '{print $1}')

关于

使用
awk
可以轻松实现:

var=$(nmcli connection show | awk 'NR==2{print $1}')
echo "$var"
产出:ens18

它是如何工作的

  • 管道操作符“|”用于将
    nmcli connection show
    的输出传递到
    awk
  • NR==2
    告诉
    awk
    处理第二行输入
  • {print$1}
    告诉
    awk
    打印正在处理的行的第一列

  • 使用
    awk
    可以轻松实现:

    var=$(nmcli connection show | awk 'NR==2{print $1}')
    echo "$var"
    
    产出:ens18

    它是如何工作的

  • 管道操作符“|”用于将
    nmcli connection show
    的输出传递到
    awk
  • NR==2
    告诉
    awk
    处理第二行输入
  • {print$1}
    告诉
    awk
    打印正在处理的行的第一列

  • 应尽可能避免截图,以利于复制和粘贴文本(或至少显示截图和文本表示,正如现在编辑的问题所做的那样)——尽管on专门针对代码,但许多原因也适用于其他地方。屏幕截图不可搜索;不能复制和粘贴用于测试或故障排除;人们无法可靠地检测到隐藏的或相似的字符;等等。应尽可能避免截图,以利于复制和粘贴文本(或至少显示截图和文本表示,正如问题现在编辑的那样)——尽管在上特别提到代码,但许多原因也适用于其他地方。屏幕截图不可搜索;不能复制和粘贴用于测试或故障排除;人们无法可靠地检测到隐藏的或相似的字符;等等。
    nmcli连接show | awk'{var=$4}END{print var}
    将避免启动
    tail
    的副本,也将仅使用空格而不是制表符。
    nmcli连接show | awk'{var=$4}END{print var}
    将避免启动
    tail
    的副本,而且还可以使用空格,而不仅仅是制表符。
    awk'/NAME/{print$1}'
    将避免需要单独的
    grep
    awk'/NAME/{print$1}'
    将避免需要单独的
    grep