Arch 가상 머신의 로컬 IP를 얻으려고 합니다. 나는 grep을 사용하여 내가 원하는 내용을 포함하는 줄을 얻었지만 sed를 사용하여 줄을 다듬고 싶습니다.
inet <<192.168.0.16>>/24 brd 192.1680.255 scope global enp0s3 $ I want the IP in <<>>
ip addr show | grep 'inet\ ' | sed -n -e 's/^.*inet\ (.*)\/.*$/\1/p'
-n # print nothing by default
s # replacement command
^ # begin line
.* # anything
inet\ # inet and then a space
(.*) # capture anything
\/ # end capture at the / that comes before 24
.* # anything
$ # end
\1 # replace all that with the first capture group which should be the IP
p # print the output
하지만 일단 sed를 추가하면 아무 것도 제공되지 않습니다. 정규식에 문제가 있는 것 같습니다.
답변1
awk
이는 grep
and 를 사용하는 것보다 쉽습니다 sed
:
ip addr show eth0 | awk '/inet / {print $2}'
IP에서 CIDR 넷마스크를 제거하려는 경우:
ip addr show eth0 | awk '/inet / {gsub(/\/.*/,"",$2); print $2}'
인터페이스에는 여러 개의 IP 주소가 있을 수 있습니다. 예를 들어 ip addr show br0 | awk '/inet / {print $2}'
내 시스템에는 11개의 IPv4 주소가 있으며 그 중 일부는 공용 IP 주소이고 일부는 RFC1918 개인 주소입니다.