linuxのeth 0のIPアドレスを取り出すコマンドを実行してください

5601 ワード

awk、grep、sed、cut
一、従来の方法

  
  
  
  
  1. [root@localhost ~]# ifconfig eth0 
  2. eth0      Link encap:Ethernet  HWaddr BC:30:5B:C0:CD:4F   
  3.           inet addr:192.168.7.2  Bcast:192.168.7.255  Mask:255.255.255.0 
  4.           inet6 addr: fe80::be30:5bff:fec0:cd4f/64 Scope:Link 
  5.           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1 
  6.           RX packets:45814755 errors:12 dropped:0 overruns:0 frame:55 
  7.           TX packets:14791104 errors:0 dropped:0 overruns:0 carrier:0 
  8.           collisions:0 txqueuelen:1000  
  9.           RX bytes:4338136769 (4.0 GiB)  TX bytes:2483722504 (2.3 GiB) 
  10.           Interrupt:16  
  11.  
  12. [root@localhost ~]# ifconfig eth0 |grep 'inet add' 
  13.           inet addr:192.168.7.2  Bcast:192.168.7.255  Mask:255.255.255.0 
  14. [root@localhost ~]# ifconfig eth0 |grep 'inet add'|awk -F ":" '{print $2}' 
  15. 192.168.7.2  Bcast 
  16. [root@localhost ~]# ifconfig eth0 |grep 'inet add'|awk -F ":" '{print $2}'|awk '{print $1}' 
  17. 192.168.7.2 
  18. [root@localhost ~]#  

二、awkが同時に複数の区切り文字を使用することによって実現する.

  
  
  
  
  1. [root@localhost ~]# ifconfig eth0|grep 'inet addr' 
  2.           inet addr:192.168.7.2  Bcast:192.168.7.255  Mask:255.255.255.0 
  3. [root@localhost ~]# ifconfig eth0|grep 'inet addr'|awk -F'[ :]' '{print $13}' 
  4. 192.168.7.2 
  5. [root@localhost ~]# 
  6. IP 'inet addr’ , awk :
  7. $ninet$13, , ?

三、awkで複数の区切り文字を同時に使用し、複数の区切り文字を正則的に一致させる方法で実現する.

  
  
  
  
  1. [root@localhost ~]# ifconfig eth0 |awk NR=2 
  2. eth0      Link encap:Ethernet  HWaddr BC:30:5B:C0:CD:4F   
  3.           inet addr:192.168.7.2  Bcast:192.168.7.255  Mask:255.255.255.0 
  4.           inet6 addr: fe80::be30:5bff:fec0:cd4f/64 Scope:Link 
  5.           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1 
  6.           RX packets:45867518 errors:12 dropped:0 overruns:0 frame:55 
  7.           TX packets:14808564 errors:0 dropped:0 overruns:0 carrier:0 
  8.           collisions:0 txqueuelen:1000  
  9.           RX bytes:4343100002 (4.0 GiB)  TX bytes:2486006118 (2.3 GiB) 
  10.           Interrupt:16  
  11.  
  12. [root@localhost ~]# ifconfig eth0 |awk NR==2 
  13.           inet addr:192.168.7.2  Bcast:192.168.7.255  Mask:255.255.255.0 
  14. [root@localhost ~]# ifconfig eth0 |awk -F '[ :]+' 'NR==2 {print $4}' 
  15. 192.168.7.2 
  16. [root@localhost ~]#  

 
ヒント:本題NRは行番号、区切り記号+番号が一致し、[]内の1つ以上の任意の区切り記号で、ここでは1つ以上のコロンまたはスペースが一致します.
1)awk-Fの後ろには区切り記号「[スペース:]+」が付いており、[スペース:]多区切り記号はスペースまたはコロンで区切られることを意味し、後ろの「+」記号は正規表現であり、前のスペースまたはコロンに一致することを意味し、両者の1つまたは1つ以上である.
2)NR==2とsed-n「2 p」、相当、意味はすべて何行目を選ぶので、例:
[root@oldboy ~]# ifconfig eth0|awk NR==2
          inet addr:192.168.7.2  Bcast:192.168.7.255  Mask:255.255.255.0
3)awk-F'[:]+'の区切り文字を指定すると、異なる文字列で区切られた列は次のようになります.
 
         
inet
addr
192.168.7.2
  Bcast:192.168.7.255  Mask:255.255.255.0
第1列
2列目
第3列
4列目
後は無視する.
 
4)答えawkの部分全体は、NR=2で2行目を取り出し、-F'[-:]+マルチセパレータで正規マッチングし、{print$4}で4列目を印刷することを意味します.
 
本文は「老男の子のlinuxブログ」ブログから