在很多軟體配置過程中,都需要設定id資訊,通常我選擇使用系統配置的eth0網絡卡的ip位址資訊,比如salt-minion-id,在通過cobbler批量安裝作業系統時,會給作業系統自定義或者dhcp配置ip位址資訊,然後在之後的配置過程中,如何將該ip位址取出來,配置到minion_id檔案中,也是乙個小問題。
最近看了一下正規表示式,想通過正規表示式的方式,從命令列中,獲取到ip位址資訊。不帶任何其他資訊的。
獲取ip位址資訊
通過ip addr show eth0和ifconfig eth0,檢視eth0網絡卡資訊。
[root@salt-master ~]# ip addr show eth0
2: eth0:
mtu 1500 qdisc pfifo_fast state up group default qlen 1000
link/ether 00:0c:29:90:36:9d brd ff:ff:ff:ff:ff:ff
inet 192.168.64.131/24 brd 192.168.64.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe90:369d/64 scope link
valid_lft forever preferred_lft forever
我們要獲取的是inet位址,192.168.64.131,只是乙個位址,不需要/24的掩碼和其他資訊。
sed擷取
主要的實現方式是,通過sg替換,將不需要的內容匹配出來,然後替換為空,然後保留最後的資訊。
sed -n 取消預設輸出,只顯示sed之後的結果
sed 's###g' 查詢,替換
sed p 列印編輯後的內容, 's###gp'
[root@salt-master ~]# ip addr show eth0|sed -n 's#.*inet ##gp'
192.168.64.131/24 brd 192.168.64.255 scope global eth0
匹配inet之前的部分,然後全部替換為空,然後列印出來
上面就已經擷取出來ip位址部分了,但是後面還有一些資訊不需要。再匹配一次
[root@salt-master ~]# ip addr show eth0|sed -n 's#.*inet ##gp'|sed -n 's#/.*##gp'
192.168.64.131
匹配掩碼/和後面所有內容,然後替換為空,列印出來,這樣就顯示出來ip位址了。
sed後向引用
[root@salt-master ~]# ip addr show eth0|sed -nr 's#.*inet (.*)/.*#\1#gp'
192.168.64.131
這個解釋起來比較簡答,首先是獲取eth0的全部輸出,然後匹配 .*inet (.)/.
如果括號比較多,可以以此類推,\2 \3這麼展示。
其實獲取ip位址還有很多簡單的方法,比如直接檔案中進行擷取等等。
獲取linux系統的ip位址
使用shell指令碼獲取linux系統的ip位址 ifconfig a grep inet grep v 127.0.0.1 grep v inet6 awk tr d addr 如果沒有ifconfig命令,可使用 ip addr grep inet grep v 127.0.0.1 grep v...
linux c函式獲取系統IP位址
一,通過分析 etc hosts檔案裡對映關係獲取ip位址。include include int main gethostname hostname,sizeof hostname he gethostbyname hostname printf hostname s n hostname pri...
系統介面獲取網絡卡ip位址
有時候程式需要獲取網絡卡的ip位址我們習慣於ifconfig獲取,有的人也使用popen用ifconfig來獲取但是現在我將介紹下通過系統介面獲取,如下 include include include include int getsubnetmask char ip for ifa iflist ...