나는 많은 조사를 해봤지만 내 질문에 대한 답을 찾지 못했습니다.
현재 다음 명령이 있습니다.
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을 뺀 값을 찾을 때까지 첫 번째 문자부터 시작합니다.
시스템이 없으면 ss
sed를 사용할 수 있습니다.
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"