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

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

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

下面的代码是什么意思?

 awk -F ' *|:' ' 

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

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

例如:如果这是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 

打破正则expression式:

 ' *|:' 

 ' *' 

意思是任何数量的空格,而其余的字符没有特殊的含义,所以它们中的任何一个都可以是分隔符。 *本身不是一个分隔符,它只是意味着任何数字的前面的字符,一个空格。

如您所知, 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