grep 명령은 특정 단어만 추출합니다

grep 명령은 특정 단어만 추출합니다

IP 주소를 표시하는 임의의 행이 많이 포함된 대규모 보고서가 있습니다. 모든 IP 주소는 192.168.1로 시작합니다. IP 주소를 추출하여 다음과 같은 보고서를 받고 싶습니다.

192. 무엇이든.

192.xx.xx.xx

192.xx.xx.xx

다른 것은 없습니다. 나는 그것을 시도했고 cat filename | grep -w 192 전체 라인을 얻는 것 같습니다. 나는 단지 전체 IP 주소를 원합니다. 저와 공유해 주실 수 있는 정보에 감사드립니다.

답변1

egrep -o나는 이것을 사용하여 또는grep -E -o

grep의 -E 플래그는 정규 표현식(egrep이 기본적으로 수행하는 작업)을 활성화하고 -o 플래그는 인쇄합니다.오직일치하는 문자열입니다.

grep -E -o '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' /path/to/log
192.168.1.11

답변2

grep -o '192.168.[0-9.]*' datfile | sort -u

이전 버전으로 이식 가능하지 않을 수도 있지만 grepGNU -o와 *BSD 모두에서 해당되는 것 같습니다 grep. 따라서... (IP 주소와도 완벽하게 일치하지는 않지만 정규식을 사용하여 올바른 숫자 범위를 적용하는 것은 꽤 짜증나는 일입니다.)

답변3

sed -n 's/.*\(192.168.[^ ]*\).*/\1/p' filename

그러면 문제가 해결될 것입니다. \>단어의 끝을 나타냅니다.

답변4

모든 IP 주소는 192.168.다음과 같은 작업으로 시작되므로 다음을 수행할 수 있습니다.

grep -o '192\.168\.[^ ]\+' file.txt

예를 들어:

$ grep -o '192\.168\.[^ ]\+' bar.txt 
192.168.5.4
192.168.1.2

관련 정보