문자열 사이와 다음 공백 앞의 모든 것을 일치시키는 방법

문자열 사이와 다음 공백 앞의 모든 것을 일치시키는 방법

다음 문자열이 있다고 가정해 보겠습니다.

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])'

관련 정보