터미널 명령 | IP 주소 쿼리

터미널 명령 | IP 주소 쿼리
ifconfig -a | grep  10.16
     inet 10.16.x.xx netmask 0xffffff00 broadcast 10.16.x.xxx
     inet 10.16.x.xx netmask 0xffffff80 broadcast 10.16.x.xxx

나는 숫자를 다음으로 대체했습니다.x

내 목표는 inet IP를 제외한 모든 것을 제거하는 것입니다. 따라서 다음과 같이 표시됩니다.

10.16.x.xx
10.16.x.xx

가능합니까? 명령을 최대한 단순하게 유지하고 여러 운영 체제(10.9/10.10/10.11)에서 작동하도록 합니다.

답변1

글쎄, 당신의 IP가 다음으로 시작한다는 것을 알고 있다면 10.16:

ifconfig -a | grep -oP '\b10\.16\.[0-9.]+\b'

grep또는 지원하지 않는 경우 -P또는 -o:

ifconfig -a | awk '/10\.16\./ && /inet/{print $2}'

그렇지 않은 경우 다음으로 시작하는 모든 줄을 찾아 inet두 번째 필드를 인쇄할 수 있습니다.

ifconfig -a | awk '$1=="inet"{print $2}'

그러나 이것은 또한 127.0.0.1localhost를 반환합니다. 이를 방지하려면 다음을 수행할 수 있습니다.

ifconfig -a | awk '$1=="inet" && $5=="broadcast"{print $2}'

이것을 테스트할 Mac이 없지만 일반적으로 다음을 ifconfig위해 더 이상 사용되지 않습니다 ip.

ip addr show | awk -F'[ /]*' '$2=="inet" && $5=="brd"{print $3}'

답변2

ip addr show로고와 함께 사용됩니다 -o. 예를 들어, 내가 연결된 인터페이스의 모든 IPv4 주소는 다음과 같습니다.

$ ip -4 -o addr show  | awk '{print $4}'                                                                                 
127.0.0.1/8
10.42.0.1/24
192.168.0.78/24
10.0.3.1/24

10.다음으로 시작하는 특정 주소만 얻을 수 있습니다.

$ ip -4 -o addr show  | awk '/10\./{print $4}'                                                                           
10.42.0.1/24
10.0.3.1/24

CIDR 표기법은 다음과 같이 제거할 수 있습니다.

$ ip -4 -o addr show  | awk '/10\./{gsub(/\//," ");print $4}'                                                            
10.42.0.1
10.0.3.1

답변3

모든 inet IP를 가져옵니다.

ifconfig -a | grep -oP 'inet \K\S+'

10.16 제품군을 얻으려면:

ifconfig -a | grep -oP 'inet \K10\.16\S+'

답변4

perl예를 들어 - 명령을 사용할 수 있습니다 .

perl -ne '$_=~/inet\s(\d+\.\d+\.\d+\.\d+)\s/; print $1,"\n"'

정규식을 사용하여 IP를 찾습니다.인트라넷그리고 인쇄하세요. 출력을 파이프로 연결하면 됩니다.

예:

ifconfig -a | grep  10.16 | perl -ne '$_=~/inet\s(\d+\.\d+\.\d+\.\d+)\s/; print $1,"\n"'

관련 정보