저는 정규식을 배우고 있으며 연습으로 IP 주소를 grep'ing하려고 시도했지만 결과가 없습니다. VSCode에서 시도했는데 작동했습니다. 누구든지 내가 어디로 잘못 가고 있는지 알려줄 수 있습니까?
echo 192.168.1.1 | grep -e '\d+\.\d+\.\d+\.\d+'
답변1
사용 grep -P
:
-P, --perl-regexp PATTERNS are Perl regular expressions
답변2
정규식은 실제로 IPv4 주소와 같은 항목을 구문 분석하는 데 사용되지 않습니다. 특정 수준의 정확도를 달성하기 위해 다음을 시도해 볼 수 있습니다.
숫자 자체를 일치시키는 경우 표현식은 \d+\.\d+\.\d+\.\d+
점으로 구분된 4개의 숫자 집합과 일치합니다.\d
정규식을 기억하세요많이있다맛사용된 엔진에 따라 결과가 달라질 수 있습니다. 다른 답변에서 제안한 대로 사용하면 grep -P
구문 분석 엔진이 변경됩니다.
존재하다IPv4 주소 일치 - O'Reilly's 정규식 매뉴얼몇 가지 예가 있습니다.
이는 IP 주소만 확인하지만 299.299.111.1
많은 확인을 통과하지는 않습니다.
^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$
페이지의 다른 예에서는 감지 범위를 유효한 IP 주소로 좁히고 긴 텍스트에서 정확한 추출을 위한 제안을 살펴보면 IPv4 주소가 정규식에 적합하지 않은 이유를 알 수 있습니다.
\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}↵
(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b