![여러 줄 문자열에서 정규식 그룹의 IP 주소를 선택하세요.](https://linux55.com/image/165731/%EC%97%AC%EB%9F%AC%20%EC%A4%84%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%97%90%EC%84%9C%20%EC%A0%95%EA%B7%9C%EC%8B%9D%20%EA%B7%B8%EB%A3%B9%EC%9D%98%20IP%20%EC%A3%BC%EC%86%8C%EB%A5%BC%20%EC%84%A0%ED%83%9D%ED%95%98%EC%84%B8%EC%9A%94..png)
라우팅 테이블에서 IP 주소를 선택하려고 하는데 sed 또는 grep 표현식을 만들 수 없습니다.
정규식 테스터가 예상한 대로 그룹 1을 선택하고 작동하는 다음 정규식이 있습니다.
.*0\.0\.0\.0\/0.*(\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b).*eth0.*
awk를 통해 원하는 출력을 쉽게 얻을 수 있었지만 내 환경에서 스크립트를 실행하면 bash 변수가 비어 있습니다. sed와 awk로 다양한 표현을 시도했지만 익숙한 것보다 더 많은 선택자가 필요한 것 같습니다.
/usr/bin/vtysh -c 'show ip route' |
sed -n 's/.*\(\b\d\{1,3\}\.\d\{1,3\}\.\d\{1,3\}\.\d{1,3}\b\).*eth0.*/\1/p'
다음과 같이 입력하세요
Codes: K - kernel route, C - connected, S - static, R - RIP,
O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,
F - PBR, f - OpenFabric,
> - selected route, * - FIB route, q - queued route, r - rejected route
S>* 0.0.0.0/0 [210/0] via 9.16.24.1, eth0, 1d06h57m
S> 0.0.0.0/0 [300/0] via 9.16.26.1, eth1, 1d06h57m
O>* 10.0.0.0/19 [110/42] via 10.255.255.21, eth1, 1d06h56m
* via 10.255.255.22, eth1, 1d06h56m
예상 출력:
9.16.24.1
답변1
grep
awk
나는 이것이 (GNU) 또는 다음 을 위한 직업이라고 생각합니다 sed
.
grep -Po "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}(?=, eth0)" file
산출:
9.16.24.1