正規表現の一致結果に関する質問

正規表現の一致結果に関する質問

次のコマンドを実行しました。

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

ベストアンサー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:。次に、inet3番目の列はマスクされた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'

もっとエレガントにできると思います。

おすすめ記事