"ifconfig" 출력에서 ​​인터페이스 이름 및 IP 주소 추출

"ifconfig" 출력에서 ​​인터페이스 이름 및 IP 주소 추출

나는 다음과 같은 결과를 얻었습니다.

eth-g0    Link encap:Ethernet  HWaddr 44 
      inet addr:222.222.22.22  Bcafdst:0.0.0.0 
      UP BROADCAST RUNNING MULTICAST  MTU:1500 
      RX packets:9073618 errors:0 dropped:0 overruns:0 
      TX packets:6846448 errors:0 dropped:0 overruns:0 
      collisions:0 txqueuelen:1000 
      RX bytes:16fd45599237 (1.99 GiB)  TX bytes:1937392674 (1.8 
      Interrupt:36 
eth-g1    Link encap:Ethernet  HWaddr 44 
      inet addr:22.222.222.22  Bcast:0.2.2.2 
      UP BROADCAST MULTICAST  MTU:1500 
      RX packets:0 errors:0 dropped:0 overruns:0 
      TX packets:0 errors:0 dropped:0 overruns:0 
      collisions:0 txqueuelen:1200 
      RX bytes:0 (0.0 b)  TX bytes:0 (0.0 
      Interrupt:37 

다음 출력이 필요합니다.

eth-g0 inet 222.222.22.22

inet이 없는 두 번째 줄 eth-g1(물론 가상의 IP입니다)

나는 이것을없이 한 줄로 출력하려고합니다.\n

지금까지 나는 시도했다

ifconfig| egrep -o  "eth-g0...|inet................"

하지만 가끔 그런 일이 있기 때문에 그다지 좋지는 않습니다.

inet 222.22.22.222

때때로

inet addr 22.222.22.22

새로운 줄에 모든 것을 인쇄합니다.

답변1

$ ifconfig | awk '/^eth-g0/ { iface = $1; getline; sub("addr:", ""); print iface, $1, $2 }'
eth-g0 inet 222.222.22.22

이것은 구문 분석된 출력을 사용합니다 awk. 문자열로 시작하는 줄이 발견되면 eth-g0첫 번째 단어를 변수(인터페이스 이름)에 저장한 후 다음 줄을 즉시 읽어 addr:새 줄부터 삭제합니다. 그런 다음 인터페이스 이름과 공백으로 구분된 처음 두 단어를 새 줄에 인쇄합니다.

답변2

귀하의 질문은 해독하기가 약간 어렵지만 아마도 이것이 귀하가 원하는 일이라고 생각합니다.

ifconfig | grep -A1 "^eth-g0 " | grep -Eo "^eth[^ ]+|inet (addr )?[^ ]+" | paste - -

이 솔루션은 실행하려는 명령을 기반으로 하여 더 쉽게 이해할 수 있기를 바랍니다.

이는 최선의 방법이 아닐 수도 있습니다.

관련 정보