ip a | egrep '([0-9]{1,3}\.){3}[0-9]{1,3}|enp0s' | grep -e 10 -e 172 -e 192 | awk '{print $2}' | awk '{gsub("/24", "");print}' | xargs
위 명령의 출력은 다음과 같습니다.
enp0s3: 10.0.2.15 enp0s8: 192.168.56.100
네트워크 카드 이름으로 시작하는 두 줄을 사용하여 출력을 다르게 인쇄하고 싶습니다.
원하는 결과를 얻으려면 출력을 어떻게 편집해야 합니까?
답변1
내 생각에 당신이 찾고 있는 것은
ip a | awk '/inet .*enp[0-9]*s[0-9]*/ { print $NF " " gensub(/\/[0-9]*/,"",1,$2); }'
여러 enp0을 허용하도록 인터페이스 이름 일치를 수정했습니다(내 시스템에서는 많은 인터페이스가 enp2s*입니다). 또한 ipv6 주소('inet6')를 제외하는 'inet'와 행을 일치시켰습니다.
답변2
빠르고 더러운 해결책은 옵션을 제공하는 것 xargs
입니다 -L 2
. 에서 모든 작업을 수행하는 것이 더 좋습니다 awk
. 매우 강력합니다.
-e 10
주어진 검색 문자열이 grep
이더넷 주소나 IPv6 주소와 쉽게 일치할 수 있다는 것을 알게 되었습니다 .