
이 명령줄이 있지만 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}'