다음 문자열이 있다고 가정해 보겠습니다.
sdffsd sfdfi -ip 192.168.1.1 sdfdf ertret
"192.168.1.1" 또는 기타 유효한 IP 주소(각각 0에서 255 사이의 점으로 구분된 4개의 십진수, 예: 172.16.254.1)를 추출하고 싶습니다.
가장 쉬운 방법은 문자열 "-ip" 사이와 다음 공백(192.168.1.1과 sdfdf 사이의 공백) 사이의 모든 항목을 일치시키는 것 같습니다.
나는 시도했다:
sed -e 's/-s \(.*\)[[:space:]]/\1/'
하지만 소용없어
답변1
현재 귀하의 질문은 "'-ip' 문자열에서 다음 공백으로 추출하는 방법"입니다. 다음 명령은 이 질문에 답합니다.
sed -e 's/^.*-ip \([^ ]*\) .*$/\1/'
작동 방식은 기본적으로 "공백이 아닌 문자 수"입니다.[^ ]*
$ echo "sdf sfdi -ip 192.168.1.1 sdf eret" | sed -e 's/^.*-ip \([^ ]*\) .*$/\1/'
192.168.1.1
답변2
GNU를 가정하면 grep
:
$ echo 'sdffsd sfdfi -ip 192.168.1.1 sdfdf ertret' | grep -oE '[0-9.]+'
192.168.1.1
유효한 IP 주소로만 제한하여 문자열을 4개의 숫자 세트로 구분합니다 . 그 중 어느 것도 255를 초과하지 않습니다( 처음에는 일치하는 항목이 없기 때문에 .
처리하지 않습니다 ).<0
-
$ echo 'sdffsd sfdfi -ip 192.168.1.1 sdfdf ertret' | grep -oE '[0-9.]+' |
awk -F. '{for(i=1;i<=NF;i++){if(NF!=4||$i>255){next}}}1;'
192.168.1.1
답변3
GNU grep을 사용하십시오:
echo 'sdffsd sfdfi -ip 192.168.1.1 sdfdf ertret' | grep -oE "([0-9]{1,3}[\.]){3}[0-9]{1,3}"
산출:
192.168.1.1
답변4
잊다 sed
. 가능한 IP(v4) 주소를 추출하는 방법은 다음과 같습니다.
egrep -o '\b([0-9][0-9]?[0-9]?\.){3}[0-9][0-9]?[0-9]?\b'
절대적으로 유효한 IP 주소(예: 255보다 큰 숫자 없음)를 얻으려면 위 명령을 파이프하십시오.
egrep -v '([3-9][0-9][0-9]|2[6-9][0-9]|25[6-9])'