나는 다음과 같은 결과를 얻었습니다.
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 - -
이 솔루션은 실행하려는 명령을 기반으로 하여 더 쉽게 이해할 수 있기를 바랍니다.
이는 최선의 방법이 아닐 수도 있습니다.