텍스트 파일에서 IP 번호를 추출하는 방법은 무엇입니까?

텍스트 파일에서 IP 번호를 추출하는 방법은 무엇입니까?

다음과 같은 형식의 파일에서 IP 번호만 추출하려면 어떻게 해야 합니까?

test-Zookeeper2-Z1-solr1006 10.15.5.226
10.15.6.103 test-Zookeeper2-Z2-solr1006
10.15.5.92 test-Zookeeper3-Z1-solr1006
10.15.6.217 test-Zookeeper1-Z2-solr1006
10.15.6.83 test-Zookeeper3-Z2-solr1006
test-Zookeeper-Z1-solr1006 10.15.7.106

답변1

Perl에는 IPv4 주소를 포함한 일반적인 정규식에 대해 검증된 모듈이 있습니다.

$ perl -MRegexp::Common=net -lane 'print for grep {/^$RE{net}{IPv4}$/} @F' file
10.15.5.226
10.15.6.103
10.15.5.92
10.15.6.217
10.15.6.83
10.15.7.106

답변2

샘플 데이터의 경우:

grep -o '\b[0-9.]\+\b'

또는

grep -o '[0-9.]\{7,\}'

답변3

예제 입력이 다음 이름의 파일에 있다고 가정합니다 test.in.

sed 's/.*\([1-9][0-9]*\.[1-9][0-9]*\.[1-9][0-9]*\.[1-9][0-9]*\).*$/\1/' test.in

중복 제거 등 모든 것을 "제대로" 만드는 데 많은 시간을 소비할 수 있지만 이것이 시작입니다.

답변4

방법 awk:

$ awk '{for(i=1;i<=NF;i++){if($i~/^[0-9.]{7,15}$/){print $i}}}' file
10.15.5.226
10.15.6.103
10.15.5.92
10.15.6.217
10.15.6.83
10.15.7.106

또 다른 perl방법은 다음과 같습니다.

$ perl -lne '/\b[0-9.]{7,15}\b/ && print $&' file
10.15.5.226
10.15.6.103
10.15.5.92
10.15.6.217
10.15.6.83
10.15.7.106

관련 정보