sed: 정규 표현식 일치 그룹 추출 및 인쇄

sed: 정규 표현식 일치 그룹 추출 및 인쇄

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은 및 표준 도구를 사용하는 것입니다 .trcut

ip -o -f inet addr show dev eth0 | tr -s ' ' '/' | cut -d/ -f4

관련 정보