IP.port에서 IP 추출

IP.port에서 IP 추출

나는 많은 조사를 해봤지만 내 질문에 대한 답을 찾지 못했습니다.

현재 다음 명령이 있습니다.

netstat | grep telnet | grep ESTABLISHED | awk 'NR==1{ print $5}'

반환되는 내용은 다음과 같습니다.

192.168.15.73.64759

여기서는 포트 없이 IP를 얻고 싶습니다. 그래서,

192.168.15.73

내가 이 작업을 수행하고 있는 시스템은 임베디드 Unix 변형(QNX)을 실행하며 grep에 대한 옵션으로 -o를 지원하지 않습니다. 시스템은 아마도 가장 좋은 방법인 sed를 지원하지만 저는 해당 응용 프로그램에 익숙하지 않습니다.

내가 찾고 있는 결과를 얻기 위해 무엇을 추가할 수 있는지 말해 줄 수 있는 사람이 있나요?

답변1

cut또는 다음 을 사용할 수 있습니다 sed.

echo 192.168.15.73.64759 | cut -d '.'  -f 1-4 
echo 192.168.15.73.64759 | sed -E 's,\.[0-9]+$,,'

또는 awk:

echo 192.168.15.73.64759 | awk -F '.' '{print $1"."$2"."$3"."$4}'

답변2

단지알게 됐어 ss:

ss -n -o state established '( dport = :telnet or sport = :ssh )' | 
  awk  'NR==2 { print substr($5, 1, index($5, ":")-1) }'

netstat/grep 동작에 맞게 헤더를 건너뛰고 출력의 첫 번째 줄만 가져오기 위해 NR==2를 사용했습니다. awk 코드의 나머지 부분은 $5를 인쇄하지만 ":" 인덱스에서 1을 뺀 값을 찾을 때까지 첫 번째 문자부터 시작합니다.

시스템이 없으면 sssed를 사용할 수 있습니다.

echo 192.168.15.73.64759 | sed 's/\.[0-9]*$//'

netstat | grep telnet | grep ESTABLISHED | awk 'NR==1{ print $5}' | sed 's/\.[0-9]*$//'

이는 "마침표 뒤에 0개 이상의 숫자, 줄 끝"이 "없음"으로 대체됩니다.

답변3

문자열 대체를 사용하십시오.

$ IP=192.168.15.73.64759
$ echo ${IP%.*}
192.168.15.73

IP=$(netstat | grep telnet | grep ESTABLISHED | awk 'NR==1{ print $5}')
echo ${IP%.*}

답변4

netstat | grep telnet | grep ESTABLISHED | awk 'NR==1{ print $5}' |grep -Po "\b(?:\d{1,3}\.){3}\d{1,3}\b"

관련 정보