또는 및 파이프라인 최적화 명령을 사용하여 ifconfig의 출력을 구문 분석합니다.

또는 및 파이프라인 최적화 명령을 사용하여 ifconfig의 출력을 구문 분석합니다.

이 명령줄이 있지만 grep길이가 두 배이고awk

ifconfig eth1 2> /dev/null | grep "inet " | awk '{gsub("addr:","",$2);  print $2 }' ||
ifconfig eth0 2> /dev/null | grep "inet " | awk '{gsub("addr:","",$2);  print $2 }'`

나는 다음과 같은 방법으로 이 시간을 단축하려고 노력해 왔습니다.

echo $(ifconfig eth1 2> /dev/null || ifconfig eth0 2> /dev/null) &>  grep "inet " |
awk '{gsub("addr:","",$2);  print $2 }'

하지만 서버의 IP를 얻으려고 하면 아무것도 반환하지 않습니다. 오류가 있는 경우 정보를 얻는 가장 좋은 방법은 무엇입니까? 이것을 시도하고 다음으로 보내십시오.grep

답변1

또 다른 모듈식 접근 방식: bash에만 국한되지 않음

get_ifconfig () { 
    for iface do 
        ifconfig "$iface" 2>/dev/null && return
    done
}
get_ifconfig eth1 eth2 eth3 | sed -n 's/.*inet addr:\([0-9.]\+\).*/\1/p'

답변2

이 시도:

$ ( ifconfig eth2 2>/dev/null || ifconfig eth0 2>/dev/null ) | grep ...

동일한 논리를 가지고 있지만 ||괄호 안에서 실행되므로 성공한 명령의 출력만 grep.

답변3

이 방법은 어떻습니까?

$ echo eth1 eth0 | xargs -n 1 ifconfig 2>/dev/null | awk '/inet/{gsub("addr:","",$2);print $2;exit}'
192.168.124.132
$

답변4

IPv4 주소가 있는 첫 번째 인터페이스를 얻으려면 ifconfig한 번만 실행하여 모든 인터페이스를 표시하고 IPv4 주소가 있는 첫 번째 항목을 추출하면 됩니다. 및 으로 수행 중인 작업을 grep결합하여 추출을 최적화 할 수도 있습니다 awk.

ifconfig -a | awk '/^[^ ]/ {iface=$1}
                  iface ~ /^eth/ && sub(/inet addr:/,"") {print $1; exit}'

개행 문자는 선택 사항이므로 명확성을 위해 포함했습니다. 좀 더 자세한 버전이에요

ifconfig -a | awk 'sub(/inet addr:/,"") {print $1; exit}'

127.0.0.1이는 아마도 원하지 않는 이와 같은 내용(루프백 인터페이스에서)을 인쇄할 수 있습니다.

를 사용하는 것을 선호한다면 ip구문 분석도 마찬가지로 어색합니다.

ip addr | awk '/^[0-9]/ {iface=$2}
               iface ~ /^eth/ && $1 == "inet" {sub(/\/.*/, "", $2); print $2}'

관련 정보