awk 字段分隔符中的特殊字符或通配符

awk 字段分隔符中的特殊字符或通配符

希望了解以下命令中的特殊字符或通配符:

/sbin/ifconfig eth0 | awk -F ' *|:' '/inet addr/{print $4}'

下面的代码是什么意思?

awk -F ' *|:' '  

答案1

-F 标志(用于 awk)表示使用以下扩展正则表达式作为字段分隔符这意味着它将此处单引号之间的任何字符' *|:' 视为分隔符。

然后 Awk 将打印与 匹配的第 4 个字段inet addr

例如:如果这是的输出ifconfig eth0

eth0      Link encap:Ethernet  HWaddr 09:00:12:90:e3:e5  
          inet addr:192.168.1.29 Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe70:e3f5/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:54071 errors:1 dropped:0 overruns:0 frame:0
          TX packets:48515 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:22009423 (20.9 MiB)  TX bytes:25690847 (24.5 MiB)
          Interrupt:10 Base address:0xd020 

它应该打印出来

192.168.1.29

分解正则表达式:

' *|:'

' *'

表示任意数量的空格,其余字符没有特殊含义,因此它们都可以作为分隔符。 本身*不是分隔符,它只是表示任意数量的前导字符,即空格。

答案2

如您所知,ip command存在于/sbin和中/bin,因此如果您想以非root身份运行脚本,可以使用以下语句:

mohsen@debian:~$ ip addr show eth0 |grep inet |grep -v inet6 | awk '{print $2}' |awk -F/ '{print $1}'
192.168.1.4

相关内容