ip a
여러 IP 주소 및 인터페이스 상태 생성
나는 다음 을 통해 awk '/inet / {print $2}'
IP와 서브넷을 얻었습니다.
wolf@linux:~$ ip a | awk '/inet / {print $2}'
127.0.0.1/8
10.10.0.1/24
10.10.1.1/24
wolf@linux:~$
그런 다음 CIDR 기호를 제거하기 위해 다른 awk로 파이프했습니다.
wolf@linux:~$ ip a | awk '/inet / {print $2}' | awk -F / '{print $1}'
127.0.0.1
10.10.0.1
10.10.1.1
wolf@linux:~$
awk 출력을 다른 awk로 파이프하지 않고도 이 작업을 수행할 수 있습니까?
원하는 출력
wolf@linux:~$ ip a | <awk syntax here without additional piping>
127.0.0.1
10.10.0.1
10.10.1.1
wolf@linux:~$
답변1
실제로 사용하도록 정의한 필드 구분 기호 -F
는 정규식입니다. 따라서 다음 명령을 전달해야 합니다.
ip a | awk -F'[ /]+' '/inet / {print $3}'
답변2
ip a | awk '/inet / {FS="/"; $0=$2; print $1; FS=" "}'
첫 번째로 일치하는 레코드는 FS
기본값(공백)을 기준으로 필드로 분할됩니다. 그런 다음 FS
새 것을 설정하십시오. 교체하면 $0=$2
새로운 것을 기준으로 다시 분할됩니다 FS
. 이제 $1
우리가 원하는 내용이 포함되었으므로 인쇄해 보겠습니다. 마지막으로 우리는 FS
다음 일치 기록을 세웠습니다.
답변3
이 매우 구체적인 경우에 대해 더 나은 사용을 고려해 보셨습니까 ip
? 예를 들어:
ip -j -p -f inet a | awk -F \" '/local/ {print $4}'
그러면 ip address
키 검색이 local
IP 주소를 저장하는 JSON 객체로 인쇄됩니다. 더 선명하게 하려면 다음을 사용할 수 있습니다 jq
.
ip -j -p -f inet a | jq '.[].addr_info[].local'
ip addr
출력 변경에 영향을 받지 않으므로 마지막 명령을 권장합니다 . 그러나 원래 디자인이 정말 마음에 든다면 다음을 선택하겠습니다.
ip a | awk '/inet / {print substr($2, 1, index($2,"/")-1)}'
또는
ip a | awk '/inet / {split($2, addr, "/"); print addr[1]}'
첫 번째 명령에서는 index($2, "/")
해당 위치를 찾은 /
다음 $2
이를 사용하여 substr
하위 문자열을 생성합니다. 몇 초 안에 우리는 그것을 분할 $2
하여 배열 /
에 저장합니다 .addr
답변4
/
다음 문자를 빈 문자열로 바꿀 수 있습니다 .
ip a | awk '/inet /{ sub(/\/.*/, "", $2); print $2 }'