sed는 패턴이 처음으로 발생하지 않습니다

sed는 패턴이 처음으로 발생하지 않습니다

고양이 파일에는 다음이 포함되어 있습니다.

 inet addr:192.168.154.102 Bcast:192.168.154.255 Mask:255.255.255.0
 inet addr:127.0.0.1 Mask:255.0.0.0

나는 다음과 같이 ipaddress ( 192.168.154.102127.0.0.1)를 추출하기 위해 sed를 사용하고 있습니다.

sed -ne 's/.*\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\).*/\1/p'

하지만 그것은 단지 다음을 제공합니다:

5.255.255.0
5.0.0.0

답변1

사용 awk:

$ echo "inet addr:192.168.154.102 Bcast:192.168.154.255 Mask:255.255.255.0" | awk '{ split($2, a, ":"); print a[2] }'
192.168.154.102

반드시 사용해야 하는 경우 sed예를 들면 다음과 같습니다.

echo "inet addr:192.168.154.102 Bcast:192.168.154.255 Mask:255.255.255.0" | sed 's#.*addr:\([0-9.]*\).*#\1#g'
192.168.154.102

답변2

문제는별표정규 표현식은 최대한 탐욕스럽고 최대한 빨리 일치하기 때문입니다. 이것은 단순히 의미합니다".*"첫 번째 줄의 "거의 모든 것"과 일치합니다.

inet addr:192.168.154.102 Bcast:192.168.154.255 Mask:2

두 번째에는

inet addr:127.0.0.1 Mask:25

그래서 나머지와 당신이 얻는 것을 인쇄합니다.

귀하의 경우에는 다음과 같이 좀 더 구체적으로 설명하려고 합니다.":"구분 기호나 접두사로 사용하세요."주소:"또는 모든 문자를 제거할 수 있지만 제거할 수는 없습니다.가리키다그리고숫자IPv4 주소는 이들로만 구성되기 때문입니다. 다음 명령을 시도해 볼 수 있습니다.

tr -cd '[0-9. ]' < YOUR_FILE

그런 다음 출력 처리를 계속할 수 있습니다.

답변3

사용

sed -n '/inet addr:/s/[^:]\+:\(\S\+\).*/\1/p'

명령줄에서 이것을 시도해 보세요

ifconfig | sed -n '/inet addr:/s/[^:]\+:\(\S\+\).*/\1/p'

산출

192.168.154.102
127.0.0.1

답변4

특정 패턴을 파악하고 싶다면 다음을 사용하지 않는 것이 좋습니다.

awk -F'[: ]' '/inet addr:/{ print $4}' file

관련 정보