![IP 경로를 얻으려면 bash에서 인터페이스의 서브넷을 가져옵니다.](https://linux55.com/image/182179/IP%20%EA%B2%BD%EB%A1%9C%EB%A5%BC%20%EC%96%BB%EC%9C%BC%EB%A0%A4%EB%A9%B4%20bash%EC%97%90%EC%84%9C%20%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4%EC%9D%98%20%EC%84%9C%EB%B8%8C%EB%84%B7%EC%9D%84%20%EA%B0%80%EC%A0%B8%EC%98%B5%EB%8B%88%EB%8B%A4..png)
해당 ip addr
명령에서 유형의 서브넷 주소를 얻었 192.168.0.1/24
지만 이 ip route
명령에는 유형의 서브넷 주소가 필요합니다 192.168.0.0/24
.
sed -E 's/(?<=\d.)1(?=\/)/0/g'
다음을 사용하여 마지막 "1"을 "0"으로 변경하려고 하면 오류가 발생합니다.sed: -e expression #1, char 21: Invalid preceding regular expression
답변1
문제는 sed가 PCRE 구문을 지원하지 않는다는 것입니다. 이 GNU sed 스니펫을 사용해 보세요:
sed -r 's:([0-9]\.)[0-9]{1,3}/:\10/:g'
-r
허용되지 않으면 를 사용 하세요 -E
.
답변2
@seshoumara가 지적했듯이 sed는 앞뒤를 지원하지 않기 때문에 sed 대신 Perl을 사용하게 되었습니다.
ip -o -f inet addr show eth0 | awk '/scope global/ {print $4}' | perl -ne 's/(?<=\d.)\d{1,3}(?=\/)/0/g; print;'