2011-06-11 120 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"' 
相关问题