모든 인터페이스의 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