Regular-Expression
關於正則表達式匹配結果的問題
我執行了以下命令
ip addr | grep -En 'inet (([0-9]*\.){3}[0-9]*)/24' | awk '{print "LAN:" $3 }'
為什麼結果是'192.168.123.245/24’,而不是這個
192.168.123.245
?另一個問題是我必須使用 $3來列印 ip 而不是
$1
.
嘗試在沒有該
awk
元件的情況下執行您的命令,您將看到$3
需要什麼。ip addr | grep -En 'inet (([0-9]*\.){3}[0-9]*)/24'
沒有的命令
awk
會給你這樣的東西。11: inet 192.168.1.26/24 brd 192.168.1.255 scope global dynamic noprefixroute wlp1s0 21: inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
您可以看到第一列是行號
11:
和21:
。然後是inet
,第三列是帶遮罩的ip號。無論您使用 grep 做什麼,ip 號都將始終附加網路遮罩。如果你想擺脫網路遮罩,你應該使用sed
或者其他也會改變你找到的行的東西。Grep 只會顯示它找到的內容。試試這個:
ip addr | grep -En 'inet (([0-9]*\.){3}[0-9]{1,3})/24' | awk '{print "LAN:" $3 }' | sed -En 's/(LAN:.*)\/24/\1/p'
我相信它可以做得更優雅。