
Linux에서 네트워크 인터페이스의 IPv4 주소를 추출하려고 합니다. 작동하는 솔루션이 있습니다.
IFACE=eth0
ip a show dev $IFACE | sed -n 's/.*inet \(.*\)\/.*/\1/p'
기록을 위해 다음은 명령의 샘플 출력입니다 ip a show
.
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:51:51:b4:a9:08 brd ff:ff:ff:ff:ff:ff
inet 10.0.2.20/24 brd 10.0.2.255 scope global ens192
valid_lft forever preferred_lft forever
inet6 fe80::251:56ff:fec1:4915/64 scope link
valid_lft forever preferred_lft forever
내 솔루션이 작동하는 동안 다음이 있는지 궁금합니다.sed 방식정규식 패턴 일치 그룹의 내용을 가져와서 현재 줄을 바꾸려면(sed 용어로패턴 공간) 그것을 사용하거나 어떻게든 인쇄하시겠습니까? 나는 s///p
패턴을 전체 라인( .*
처음과 끝 포함) 으로 사용하고 확장해야 하는 것이 클러지라고 생각합니다 .
답변1
인간 중심 출력을 구문 분석하는 ip
것은 복잡합니다. JSON 출력을 사용합니다.
ip -4 -json a show dev $IFACE scope global | jq -r ".[].addr_info[].local"
답변2
원하지 않는 모든 항목을 제거할 수 있습니다(예: ) sed -n 's:.*inet ::; T; s:/.*::p'
.
그러나 또 다른 접근 방식 ip -o -f inet
은 및 표준 도구를 사용하는 것입니다 .tr
cut
ip -o -f inet addr show dev eth0 | tr -s ' ' '/' | cut -d/ -f4