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.1
localhost를 반환합니다. 이를 방지하려면 다음을 수행할 수 있습니다.
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"'