Regular-Expression

關於正則表達式匹配結果的問題

  • March 27, 2020

我執行了以下命令

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'

我相信它可以做得更優雅。

引用自:https://unix.stackexchange.com/questions/575257