Grep第一个字符串匹配正则表达式

时间:2011-06-11 11:52:35

标签: regex bash 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。

1 个答案:

答案 0 :(得分: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"'
相关问题