IP 주소 범위 찾기를 사용하는 방법은 무엇입니까 sed
?
예를 들어:
sed '/85.159.56/s/$/ --- API SYSTEMS/'
그러면 85.159.56으로 시작하는 IP 주소를 찾아 그 옆에 인쇄합니다. --- API 시스템
필터링할 범위가 있지만 다음에서 사이 또는 초과를 적용하는 방법을 잘 모르겠습니다 sed
.
sed '/192.200.160.0 - 192.200.191.255/s/$/ --- APIv2 SYSTEMS/'
답변1
숫자 범위는 다음과 같은 표현식이 필요하므로 정규 표현식에는 적합하지 않습니다.
gsed '/192\.200\.1\([6-8][0-9]\|9[01]\)\./s/$/ --- APIv2 SYSTEMS/'
160과 191 사이의 값을 일치시키려면 표현식을 생성할 수 있는 코드를 작성하는 것이 이상적입니다. 이러한 표현식을 수동으로 작성하거나 수정할 때 사람이 실수할 가능성이 매우 높기 때문입니다. 더 나은 솔루션은 IP 주소를 이해하고 Perl과 같은 CIDR 표기법을 지원하는 솔루션일 수 있습니다.네트워크 주소::IP그런 다음 IP 주소를 구문 분석하고 해당 주소가 ->within
다른 곳에서 구문 분석된 범위인지 확인합니다.
답변2
짧은(비 SED) 답변
미안하지만 그게 내가 한 줄로 할 수 있는 최선이야. 분명히 이것은 SED가 아닙니다.
perl -MNetAddr::IP -i.bak -nle '$re=NetAddr::IP->new("85.159.56.0/24")->re(); if(/$re/){ print $_ . " --- APIv2 SYSTEMS"}else{print}' yourfile.txt
그것이 무엇을 할 수 있는지
그러면 서브넷 "85.159.56.0/24"를 정규식으로 변환한 다음 해당 표현식의 각 줄을 테스트하고 일치하는 항목이 있으면 줄 끝에 "---APIv2 SYSTEMS"를 추가합니다.
- "-Mmodule"은 코드를 실행하기 전에 모듈을 로드합니다.
- "-i.bak"는 파일(yourfile.txt)을 수정하고 yourfile.txt.bak로 백업한다는 의미입니다.
- "-n"은 Perl이 프로그램을 반복하게 하여 sed -n 또는 awk와 같이 파일 이름 인수를 반복하게 합니다.
- "-s"를 사용하면 프로그램 외부에서 매개변수를 설정할 수 있습니다.
- 그리고 "---variable=X"가 설정 방법입니다.
- "-l"은 게으르고 입력 줄을 삭제하고 모든 출력에 캐리지 리턴을 추가하기 때문입니다.
- 마지막 '-e'print "I'm a one-liner"'는 코드를 보유하는 비트입니다.
그냥 정규 표현식
정규 표현식만 원하는 경우(grep 또는 sed/awk 등에 사용됨):
perl -MNetAddr::IP -lse 'print NetAddr::IP->new($range)->re()' -- -range=85.159.56.0/24
궁금한 경우 다음을 출력합니다.
(?:(?<![0-9])85\.159\.(?:56)\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?![0-9]))
전제 조건
cpan에서 NetAddr::IP 모듈을 설치해야 할 수도 있다는 점은 주목할 가치가 있습니다. 메모리가 부족해서 cpanm을 사용했지만 구문은 동일합니다.
sudo cpanm install NetAddr::IP
결론
SED와 AWK는 훌륭한 도구입니다. 이에 관한 책이 두 권 있고 필요할 때 사용하려고 노력하지만 Perl은 일반적으로 일련의 모듈과 전체 단일 코드 라인으로 여러분을 지원합니다. 나는 Python에 그러한 도구가 있다고 확신하지만 나는 Perl 팬입니다. 나도 추천해도 될까?http://explainshell.com나는 종종 누군가가 나에게 달리기를 요청하는 것이 무엇인지 알아내기 위해 이것을 사용합니다. 명령과 다양한 스위치/매개변수를 사용하여 매뉴얼 페이지의 관련 부분만 표시합니다.