f 参数在这个 cut 命令示例中如何工作?

f 参数在这个 cut 命令示例中如何工作?

我正在准备 LPIC-1 考试,但我无法理解以下命令剪切示例:

ifconfig enp3s0f2产生以下结果:

enp3s0f2: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 00:90:f5:e5:e4:7c  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

然后,我运行显示此输出的命令ifconfig enp3s0f2 | grep ether | cut -d " " -f 10,因为我想隔离 MAC 地址:00:90:f5:e5:e4:7c

然而,我只使用了-f值为 10 的参数。我不明白为什么是 10 而不是另一个数字。我已经查看了几页有关如何使用 cut 命令和不同参数的示例,但在这个示例中,它对我来说根本没有意义。

如何隔离这个MAC地址它应该是值10分配给-f?

答案1

这是因为我们使用了分隔符,前面有 8 个空格ether

我们可以使用下面的代码进行检查。

 ifconfig enp3s0f2 | grep ether | sed 's/ether.*//' |grep -o ' ' | wc -l 

 8

所以第 9 个字段是ether,第 10 个字段是00:90:f5:e5:e4:7c

答案2

man cut

   -d, --delimiter=DELIM
          use DELIM instead of TAB for field delimiter

   -f, --fields=LIST
          select only these fields;  also print any line that contains no delimiter character, unless the -s option is specified

因此,您将按每个分隔字符(在您的情况下为空格)分割输出。这会产生一个字段数组。该-f选项告诉 cut 仅返回第 10 个字段。

相关内容