sed -E 正規表現が期待どおりに動作しません (.*?)

sed -E 正規表現が期待どおりに動作しません (.*?)

すべてのインターフェイスのIPアドレスを表示するには、「ip a」パイプと「sed」パイプを使用します。

ip a |sed -En "{N ; N ; s/^[1-9]: (.*: ).+\n?.+\n? {4}inet \
(([0-9]{1,3}[./]){4}[0-9]{1,2}).*/\1\2/p}"

グループを交換できない理由

(([0-9]{1,3}[./]){4}[0-9]{1,2})

(.*\ ) を使用して代わりに作成

ip a |sed -En "{N ; N ; s/^[1-9]: (.*?: ).+\n?.+\n? {4}inet \
(.*\ ).*/\1\2/p}"

一致しますが、行末のIPアドレスの後のスペースのみを見つけて、行全体を\ 2として印刷します。 「一般的な」正規表現ではこれが機能します。

ip a の出力は次のようになります。

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000  
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00  
    inet 127.0.0.1/8 scope host lo  
       valid_lft forever preferred_lft forever  
    inet6 ::1/128 scope host   
       valid_lft forever preferred_lft forever  
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000  
    link/ether 10:78:d2:8e:e7:cf brd ff:ff:ff:ff:ff:ff  
    inet 192.168.1.44/24 brd 192.168.1.255 scope global dynamic eno1  
       valid_lft 41778sec preferred_lft 41778sec  
    inet6 fe80::1278:d2ff:fe8e:e7cf/64 scope link   
       valid_lft forever preferred_lft forever  
3: wlx68a3c45b2875: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000  
    link/ether 68:a3:c4:5b:28:75 brd ff:ff:ff:ff:ff:ff  
    inet 192.168.1.36/24 brd 192.168.1.255 scope global dynamic noprefixroute wlx68a3c45b2875  
       valid_lft 40457sec preferred_lft 40457sec  
    inet6 fe80::6aa3:c4ff:fe5b:2875/64 scope link   
       valid_lft forever preferred_lft forever  

ベストアンサー1

文字列を空白まで一致させるには、コマンド[^ ]* 全体を使用します。

ip a |sed -En "{N ; N ; s/^[1-9]: (.*: ).+\n?.+\n? {4}inet \  
([^ ]*).*/\1\2/p}"

出力:

lo: 127.0.0.1/8    
eno1: 192.168.1.44/24    
wlx68a3c45b2875: 192.168.1.36/24    

おすすめ記事