2011-06-11 7 views
0

정규식과 일치하는 첫 번째 문자열을 가져 오려고합니다. 내가 문자열을에서Grep 첫 번째 문자열 일치하는 정규식

RCPT이 예를 들어 알 수없는 [211.147.3.74] : 450 4.7.1 클라이언트 호스트가 거부 : 호스트 이름을 찾을 수없는, [211.147.3.74]

내 스크립트는 다음과 같습니다 결과

IP=`echo $LINE | grep -E -o --max-count=1 '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)'` 

echo $IP 

내가

을 얻을 211.147.3.74 211.147.3.74

하지만 난 IP를 좀하고 싶습니다 한 번만. 'grep --max-count = 1'시도했지만 여전히 두 개의 IP가 있습니다.

답변

2
LINE='RCPT from unknown[211.147.3.74]: 450 4.7.1 Client host rejected: cannot find your hostname, [211.147.3.74];' 
ipn='(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)' 
IP=`echo $LINE | grep -E -o "$ipn\.$ipn\.$ipn\.$ipn" | head -1` 
echo "$IP" 

또는 from here

echo "$LINE" | perl -MRegexp::Common=net -ne '/($RE{net}{IPv4})/ and print "$1\n"' 
관련 문제