별도의 줄에 명령 출력 인쇄

별도의 줄에 명령 출력 인쇄
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 주소와 쉽게 일치할 수 있다는 것을 알게 되었습니다 .

관련 정보