Centos7 ,使用grep,cut awk 提取IP地址

Posted xiaojin21cen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Centos7 ,使用grep,cut awk 提取IP地址相关的知识,希望对你有一定的参考价值。

1、任务说明

本示例的主要目的是练习 grep、cut 、awk 的使用 。

任务说明,在 centos7 ,是 提取 IP 地址。

[java@localhost java_demo]$ ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.109.128  netmask 255.255.255.0  broadcast 192.168.109.255
        inet6 f000::9000:8000:3000:6000  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:15:69:41  txqueuelen 1000  (Ethernet)
        RX packets 245  bytes 27187 (26.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 285  bytes 27165 (26.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        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

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:e9:59:cf  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

分析:

ens33 是 当前主机的IP 配置,inet 是IP地址, 192.168.109.128 就是想要的结果。

2、用 cut 操作步骤

2.1、提取关键行

ens33 是 当前主机的IP 配置 ,inet 是IP地址,通过 grep "netmask" 获取当前行

[java@localhost java_demo]$ ifconfig ens33 | grep "netmask"
        inet 192.168.109.128  netmask 255.255.255.0  broadcast 192.168.109.255

2.2、尝试分割提取

想要把 192.168.109.128 提取出来,使cut 进行字符分割 。

cut -d " " -f 2 ,分割空格,提取第2列,如下:

[java@localhost java_demo]$ ifconfig ens33 | grep "netmask" | cut -d " " -f 2
 
[java@localhost java_demo]

结果是空的,为什么呢?

再看下面的示例,

[java@localhost java_demo]$ ifconfig ens33 | grep "netmask" | cut -d " " -f 2-
       inet 192.168.109.128  netmask 255.255.255.0  broadcast 192.168.109.255
[java@localhost java_demo]$ ifconfig ens33 | grep "netmask" | cut -d " " -f 4-
     inet 192.168.109.128  netmask 255.255.255.0  broadcast 192.168.109.255
[java@localhost java_demo]$ ifconfig ens33 | grep "netmask" | cut -d " " -f 6-
   inet 192.168.109.128  netmask 255.255.255.0  broadcast 192.168.109.255
[java@localhost java_demo]$ ifconfig ens33 | grep "netmask" | cut -d " " -f 8-
 inet 192.168.109.128  netmask 255.255.255.0  broadcast 192.168.109.255

发现规律, 提取行的前面有大量的空格,导致用空格进行分割时,出现大量的空白。所以要先去空格。

2.3、去空格

去空格的方法,参考我的另一篇文章: shell 去空格 ,这里不详述。

[java@localhost java_demo]$ ifconfig ens33 | grep "netmask" | awk '$1=$1'
inet 192.168.109.128 netmask 255.255.255.0 broadcast 192.168.109.255

2.4、分割提取

cut 字符分割,提取第2列,

[java@localhost java_demo]$ ifconfig ens33 | grep "netmask" | awk '$1=$1'| cut -d " " -f 2
192.168.109.128

3、用 awk 操作步骤

3.1、提取关键行

ens33 是 当前主机的IP 配置 ,inet 是IP地址,通过 grep "netmask" 获取当前行

[java@localhost java_demo]$ ifconfig ens33 | grep "netmask"
        inet 192.168.109.128  netmask 255.255.255.0  broadcast 192.168.109.255

3.2、分割提取

awk 字符分割,提取第2列,

[java@localhost java_demo]$ ifconfig ens33 | grep "netmask" | awk -F" " '{print $2}'
192.168.109.128

以上是关于Centos7 ,使用grep,cut awk 提取IP地址的主要内容,如果未能解决你的问题,请参考以下文章

如何通过命令行实用程序操作文本:grep、cut、awk、sed 或 BBEdit(Grep 查找选项)

通过 grep/awk/cut 删除字符串中的多余点

text Shell grep,awk,sed,cut文本处理对比

文本处理cat more less head tail sort uniq grep cut jion sed awk

云计算学习Days2--cat head tail sort uniq wc cut sed grep awk tr

linux基础篇07,linux文本处理cat more less head tail sort uniq grep cut jion sed awk